import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; public class InsertRowTest { public static void main(String[] args) throws Exception { Connection conn = null; Statement s = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "test", "test"); s = conn.createStatement(); s.executeUpdate("CREATE TABLE IF NOT EXISTS test (id INTEGER, PRIMARY KEY(id))"); /* s.executeUpdate("TRUNCATE test"); s.executeUpdate("INSERT INTO test (id) VALUES (1)"); */ conn.setAutoCommit(false); // BEGIN ps = conn.prepareStatement("SELECT id FROM test WHERE id=2 FOR UPDATE", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); rs = ps.executeQuery(); if(rs.next()) { // Problem! System.err.println("Unexpected data"); System.exit(1); } rs.moveToInsertRow(); rs.updateInt("id", 1); try { rs.updateRow(); System.err.println("FAIL: ResultSet.updateRow fails to throw SQLException when cursor is on insert row"); } catch(SQLException sqle) { // Expected System.err.println("PASS: ResultSet.updateRow throws SQLException when cursor is on insert row"); } rs.close(); conn.commit(); } finally { if(null != rs) try { rs.close(); } catch (SQLException sqle) { System.err.println("Error closing result set"); sqle.printStackTrace(); } if(null != ps) try { ps.close(); } catch (SQLException sqle) { System.err.println("Error closing prepared statement"); sqle.printStackTrace(); } if(null != s) try { s.close(); } catch (SQLException sqle) { System.err.println("Error closing statement"); sqle.printStackTrace(); } if(null != conn) try { conn.close(); } catch (SQLException sqle) { System.err.println("Error closing connection"); sqle.printStackTrace(); } } } }