Cách duy nhất mà một số trình điều khiển JDBC trả lại Statement.RETURN_GENERATED_KEYS
là thực hiện một số điều sau đây:
long key = -1L;
Statement statement = connection.createStatement();
statement.executeUpdate(YOUR_SQL_HERE, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = statement.getGeneratedKeys();
if (rs != null && rs.next()) {
key = rs.getLong(1);
}
Có cách nào để làm điều tương tự với PreparedStatement
?
Biên tập
Lý do tôi hỏi liệu tôi có thể làm điều tương tự khi PreparedStatement
xem xét tình huống sau:
private static final String SQL_CREATE =
"INSERT INTO
USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB)
VALUES (?, ?, ?, ?, ?)";
Trong USER
bảng có một PRIMARY KEY (USER_ID)
là a BIGINT AUTOINCREMENT
(do đó tại sao bạn không thấy nó trong SQL_CREATE
Chuỗi.
Bây giờ, tôi điền việc ?
sử dụng PreparedStatement.setXXXX(index, value)
. Tôi muốn trở về ResultSet rs = PreparedStatement.getGeneratedKeys()
. Làm thế nào tôi có thể đạt được điều này?
This method with argument cannot be called on a PreparedStatement or CallableStatement.
Điều đó có nghĩa là chúng ta phải sử dụng executeUpdate () mà không có đối số mặc dùexecuteUpdate(arg)
phương thức có thể được kế thừa trong lớp PreparedStatement nhưng chúng ta không cần phải sử dụng nó nếu không sẽ nhận được SQLException.