[Seasar-user:9317] Re: [S2Dao] DBMSとの対応表

SETO Azusa [E-MAIL ADDRESS DELETED]
2007年 7月 20日 (金) 17:57:28 JST


せとあずさです。

On 20 Jul 2007 16:48:43 +0900
山下 真里 <[E-MAIL ADDRESS DELETED]> wrote:

> tinyint(1) などの場合、S2Daoで取得する際に、Integerでは、
> 正しく取得できずに、tinyint(1)以外を利用しております。
> 
> DBMS型が、Javaの型に対応しているかを一覧にした
> 対応表などがありますと、非常にありがたいのですが、
> そういった対応表等は、存在するのでしょうか。
> 

ご質問の件についてはJDBCドライバごとに対応を調べなければ
ならないので、一覧表のような形式では存在しません。

S2Dao(S2JDBC)は値の取得時にResultSetのどのメソッドを使うかを
Beanの型から求めているのですが、Integerの場合getObject()を
使っています。

で、MySQL5.0.45+mysql-connector-java-3.1.14+WindowsXP SP2で
調べたのですが、tinyInt(1)をgetObject()するとBooleanで返して
いるので、S2Dao/S2JDBCでは1/0になってしまう、ということだと
思います。

なので、

public static class IntValueTypes extends IntegerType {
	@Override
	public Object getValue(ResultSet resultSet, int index)
			throws SQLException {
		return new Integer(resultSet.getInt(index));
	}
	@Override
	public Object getValue(ResultSet resultSet, String columnName)
			throws SQLException {
		return new Integer(resultSet.getInt(columnName));
	}
}

のようなValueTypeを作って、どこかのdiconに登録し、Beanの該当プロパティに

public static String (プロパティ名)_VALUE_TYPE="(ValueTypeのコンポーネント名)";

というアノテーションをつければ値を受け取れると思います。


-- 
せとあずさ
[E-MAIL ADDRESS DELETED]
http://www.fieldnotes.jp/d/



Seasar-user メーリングリストの案内