てきとうなメモ

本の感想とか技術メモとか

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の方が多くのドライバでうまく動くらしい.