- - PR -
DBUtilsで値が落ちる
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-14 16:43
DBUtilsを使用してHSQLDBにアクセスすると、本来値が入っているはずのカラムなのに0が取得されます。
byte,short型に限ってこの現象が起きます。 マッピングは正しいようですし、ソースのバグとは思えません。 DBUtilsに詳しい方がいらっしゃいましたら、教えてくださいませんか。 環境は OS:WindowsXP DB:HSQLDB1.7.3 JAVA:j2sdk1.4.2_04 DBUtils:DBUtils1.0 です。 ////////////////////////////////////////// import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.hsqldb.jdbcDriver; public class DbutilsTest { public static void execute() { try { Connection conn = null; try { DriverManager.registerDriver(new jdbcDriver()); conn = DriverManager.getConnection( "jdbc:hsqldb:hsql://localhost", "sa", ""); QueryRunner runner = new QueryRunner(); List accounts = (List)runner.query( conn, "select * from wk4", new BeanListHandler(Wk4.class)); Wk4 temp; for(int i=0; i<accounts.size(); ++i){ temp = (Wk4)accounts.get(i); System.out.println( temp.getData1() +"," + temp.getData2() +"," + temp.getData3() +"," + temp.getData4() +"," + temp.getData5() ); } } catch(Exception e) { e.printStackTrace(); } finally { if(conn != null) conn.close(); } } catch(SQLException sqle) { sqle.printStackTrace(); } } public static void main(String[] args) { long start = System.currentTimeMillis(); execute(); long end = System.currentTimeMillis(); System.out.println("all "+(end - start) + " ms"); } } ////////////////////////////////////////// public class Wk4{ private boolean data1; private byte data2; private short data3; private long data4; private double data5; public boolean getData1(){ return data1; } public byte getData2(){ return data2; }//* public short getData3(){ return data3; }//* public long getData4(){ return data4; } public double getData5(){ return data5; } public void setData1(boolean data1){ this.data1 = data1; } public void setData2(byte data2){ this.data2 = data2; } public void setData3(short data3){ this.data3 = data3; } public void setData4(long data4){ this.data4 = data4; } public void setData5(double data5){ this.data5 = data5; } } ////////////////////////////////////////// create table wk4 ( data1 bit, data2 TINYINT, data3 SMALLINT, data4 BIGINT, data5 REAL); ////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// この結果がdata2,data3カラムに限り、DB上はデータが入っているのに0になります。 よろしくお願いします。 |
|
投稿日時: 2005-01-14 22:51
こんにちは。
直接のお役には立てそうになくて、申し訳ありませんが、少し気になることがあるので、書きます。 org.apache.commons.dbutils.handlers.BeanListHandlerのJavadocを読むと、 /* 引用 ResultSet を JavaBeans の List へ変換する ResultSetHandler の実装です。 このクラスはスレッドセーフです。 */ とあります。 ここでいうJavaBeansとは、Wk4クラスのことだと思いますが、記されているコードを見ると、JavaBeansの要件を満たしていません。 JavaBeansは、setter,getterの規則以外に、 1.引数無しのコンストラクタの存在 2.java.io.Serializableのimplement が条件だと思います。 関係ないのかもしれませんが、念のため。 それから、0が返ってくるというフィールドですが、そのフィールドのsetterが呼ばれてるのかどうか、調べてみたほうが良いのではないですか。 |
1