JDBCの更新可能なResultSetを試す

主なDBで更新可能なResultSetを使えるか試してみました。
試したコードを抜粋するとこんなかんじ。

String sql = "select employee_name, employee_id from Employee";
PreparedStatement ps =
    con.prepareStatement(
        sql,
        ResultSet.TYPE_FORWARD_ONLY,
        ResultSet.CONCUR_UPDATABLE);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    String name = rs.getString(1);
    rs.updateString(1, name + "Hoge");
    rs.updateRow();
}
1つの表のSELECT 結合を使って複数表のSELECT
Oracle Database 10g Express Edition 10.2 ×
DB2 Express Edition v9.5 *1 ×
SQL Server 2005 Express Edition SP2 × *2 ×
MySQL 5.0.45 *3 ×
PostgreSQL 8.2.4 *4 ×

厳密にはJDBCドライバのバージョンも示したほうがいいのかもと思いつつ、ちょっと面倒なので省略。

*1:order by句があると×。しかし、TYPE_FORWARD_ONLYの代わりにTYPE_SCROLL_SENSITIVEを使ってみたらorder by句があっても○でした。ドキュメントは未確認です。

*2:ドキュメント見る限りできるみたいなんだけどなぁ。

*3:ResultSetに主キーが含まれていることが必須。

*4:ResultSetに主キーが含まれていることが必須。