解決→古ーいDB2のJDBCで、S2DaoからBigDecimalが・・・
http://d.hatena.ne.jp/htada/20070109/1168346824
先週末、悩んでいた件。
(BEANのプロパティにBigDecimalがある場合、古いDB2のJDBCはgetBigDecimal(String columnName)が無くてエラーになっちゃう。)
ResultSetWrapperをキーワードに調べて、解決できました。
ひがさん、アドバイスありがとうございました。
以下、やったこと。
※OracleResultSetFactoryがとても参考になります。
- ResultSetWrapperを継承して、自分用のResultSetをつくる。
今回は、getBigDecimal(String ColumnName)をオーバーライドしてます。
package package.name; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import org.seasar.extension.jdbc.impl.ResultSetWrapper; public class OldDB2ResultSet extends ResultSetWrapper { public OldDB2ResultSet(ResultSet resultSet) { super(resultSet); } public BigDecimal getBigDecimal(String columnName) throws SQLException { return new BigDecimal(super.getString(columnName)); } }
- BasicResultSetFactoryを継承して、上記ResultSetを返すFactoryクラスをつくる。
package package.name; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.seasar.extension.jdbc.impl.BasicResultSetFactory; public class OldDB2ResultSetFactory extends BasicResultSetFactory { public ResultSet createResultSet(PreparedStatement ps) { return new OldDB2ResultSet(super.createResultSet(ps)); } }
- jdbc.diconを書き換える。
既存で有効になっているResultSetFactoryをコメントアウトして、上記でつくったResultSetFactoryを設定。
<!-- <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/> --> <component class="package.name.OldDB2ResultSetFactory"/>
以上の3つで、動くようになりました。