たまにはweblogとして、役に立つものを残しますか。
JavaでDBアクセス用のライブラリとして有名なDbUtilsですが、
Oracleにnullの値を登録することができないという致命的なバグがあります。
最新のベータ版では修正されているという噂ですが、いかんせんベータ版、
きちんとしたところでは使用できないでしょう。
そこで、このバグのみを改修したサブクラスを作ってみました。
もちろんコピーレフトですので、使ってやってください。
package jp.ne.cool.chiba.pi01.dbutils;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
/**
* NULLを設定できないバグを改修したQueryRunner
*
* @author pi
* @version 1.0
*/
public class NullFixQueryRunner extends QueryRunner {
/**
* コンストラクタ
*/
public NullFixQueryRunner() {
super();
}
/**
* コンストラクタ
*
* @param ds DataSource
*/
public NullFixQueryRunner(DataSource ds) {
super(ds);
}
/**
* @see org.apache.commons.dbutils.QueryRunner#fillStatement(java.sql.PreparedStatement,
* java.lang.Object[])
*/
protected void fillStatement(PreparedStatement stmt, Object[] params) throws SQLException {
if (params == null) {
return;
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null) {
stmt.setObject(i + 1, params[i]);
} else {
stmt.setNull(i + 1, Types.VARCHAR);
}
}
}
}
JavaでDBアクセス用のライブラリとして有名なDbUtilsですが、
Oracleにnullの値を登録することができないという致命的なバグがあります。
最新のベータ版では修正されているという噂ですが、いかんせんベータ版、
きちんとしたところでは使用できないでしょう。
そこで、このバグのみを改修したサブクラスを作ってみました。
もちろんコピーレフトですので、使ってやってください。
package jp.ne.cool.chiba.pi01.dbutils;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
/**
* NULLを設定できないバグを改修したQueryRunner
*
* @author pi
* @version 1.0
*/
public class NullFixQueryRunner extends QueryRunner {
/**
* コンストラクタ
*/
public NullFixQueryRunner() {
super();
}
/**
* コンストラクタ
*
* @param ds DataSource
*/
public NullFixQueryRunner(DataSource ds) {
super(ds);
}
/**
* @see org.apache.commons.dbutils.QueryRunner#fillStatement(java.sql.PreparedStatement,
* java.lang.Object[])
*/
protected void fillStatement(PreparedStatement stmt, Object[] params) throws SQLException {
if (params == null) {
return;
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null) {
stmt.setObject(i + 1, params[i]);
} else {
stmt.setNull(i + 1, Types.VARCHAR);
}
}
}
}
※コメント投稿者のブログIDはブログ作成者のみに通知されます