आम तौर पर आप Statement#getGeneratedKeys()
. का उपयोग करेंगे इसके लिए (उदाहरण के लिए यह उत्तर भी देखें), लेकिन यह अभी तक (अभी भी) Oracle JDBC ड्राइवर द्वारा समर्थित नहीं है।
आपका सबसे अच्छा दांव या तो . है CallableStatement
. का उपयोग करें RETURNING
. के साथ खंड:
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);
// ...
या आग SELECT sequencename.CURRVAL
INSERT
. के बाद उसी लेन-देन में:
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();
// ...