[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 メーリングリストの案内