java.sql.PreparedStatement

へー、IS NOT FALSEと? こんな書き方もできるのか。覚えておこう。

PreparedStatementを使うだけなら、if文バリバリツギハギSQLで、プレースホルダの数が不定でも使える。プレースホルダに対応する変数をArrayListにぶち込んで、後で順番にsetObjectするだけ。

Object[] o = list.toArray();
for (int i = 0; i < o.length; i++) {
    if (o[i] != null) {
        stmt.setObject(i+1, o[i]);
    } else {
        stmt.setNull(i+1, Types.OTHER);
    }
}

この方法はJDBCドライバによっては全然ダメ。

先日の価格.comのクラックは、SQLインジェクションを使った侵入だったらしい。SQLインジェクションには、PreparedStatementが有効。クラスライブラリの機能は上手く利用したい。