Bình thường bạn sẽ sử dụng Statement#getGeneratedKeys()
cho điều này (xem thêm câu trả lời này để biết ví dụ), nhưng điều này cho đến nay (vẫn) không được hỗ trợ bởi trình điều khiển Oracle JDBC.
Đặt cược tốt nhất của bạn là một trong hai sử dụng CallableStatement
với RETURNING
mệnh đề:
String sql = "BEGIN INSERT INTO mytable(id, content) VALUES (seq_mytable.NEXTVAL(), ?) RETURNING id INTO ?; END;";
Connection connection = null;
CallableStatement statement = null;
try {
connection = database.getConnection();
statement = connection.prepareCall(sql);
statement.setString(1, "test");
statement.registerOutParameter(2, Types.NUMERIC);
statement.execute();
int id = statement.getInt(2);
// ...
Hoặc fire SELECT sequencename.CURRVAL
sau INSERT
trong cùng một giao dịch:
String sql_insert = "INSERT INTO mytable(content) VALUES (?)";
String sql_currval = "SELECT seq_mytable.CURRVAL FROM dual";
Connection connection = null;
PreparedStatement statement = null;
Statement currvalStatement = null;
ResultSet currvalResultSet = null;
try {
connection = database.getConnection();
connection.setAutoCommit(false);
statement = connection.prepareStatement(sql_insert);
statement.setString(1, "test");
statement.executeUpdate();
currvalStatement = connection.createStatement();
currvalResultSet = currvalStatement.executeQuery(sql_currval);
if (currvalResultSet.next()) {
int id = currvalResultSet.getInt(1);
}
connection.commit();
// ...