Єдиний спосіб повернення деяких драйверів JDBC Statement.RETURN_GENERATED_KEYS
- це зробити щось із наступного:
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);
}
Чи є спосіб зробити те саме PreparedStatement
?
Редагувати
Причина, по якій я запитав, чи можу я зробити те саме, PreparedStatement
розглядає наступний сценарій:
private static final String SQL_CREATE =
"INSERT INTO
USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB)
VALUES (?, ?, ?, ?, ?)";
У USER
таблиці є символ, PRIMARY KEY (USER_ID)
який є BIGINT AUTOINCREMENT
(отже, чому ви не бачите його в рядку SQL_CREATE
.
Тепер я заповнюю ?
використання PreparedStatement.setXXXX(index, value)
. Я хочу повернутися ResultSet rs = PreparedStatement.getGeneratedKeys()
. Як я можу цього досягти?
This method with argument cannot be called on a PreparedStatement or CallableStatement.
це означає, що ми повинні використовувати executeUpdate () без аргументу, хочаexecuteUpdate(arg)
метод може бути успадкований у класі PreparedStatement, але нам не потрібно його використовувати, інакше ми отримаємо SQLException.