java.sql.Types.VARCHAR
commons-dbutilsのソースコードを読んでいたのだが,変なコードを見つけた.
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 { // VARCHAR works with many drivers regardless // of the actual column type. Oddly, NULL and // OTHER don't work with Oracle's drivers. stmt.setNull(i + 1, Types.VARCHAR); } } }
このメソッドはQueryRunner#query(String sql, Object[] params, ResultSetHandler rsh)などで,パラメタをPreparedStatementにsetするための物なのだが,Types.NULLやTypes.OTHERではなくTypes.VARCHARを使っている.VARCHARの方が多くのドライバでうまく動くらしい.