Єдиний спосіб повернення деяких драйверів 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.