Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

PLSQL JDBC:Làm thế nào để lấy ID hàng cuối cùng?

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();
    // ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tính toán kích thước bảng trong Oracle

  2. Oracle:Cách đếm các hàng rỗng và không rỗng

  3. Cách kết nối cơ sở dữ liệu Oracle từ PHP

  4. Cách xuất kết quả truy vấn sang tệp CSV trong SQLcl (Oracle)

  5. Tính toán chi phí trung bình của khoảng không quảng cáo trong SQL