La seule façon que certains pilotes JDBC pour revenir Statement.RETURN_GENERATED_KEYS
est de faire quelque chose de ce qui suit:PreparedStatement avec 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);
}
Est-il possible de faire la même chose avec PreparedStatement
?
Modifier
La raison pour laquelle j'ai demandé si je peux faire la même chose avec PreparedStatement
du scénario suivant:
private static final String SQL_CREATE =
"INSERT INTO
USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB)
VALUES (?, ?, ?, ?, ?)";
Dans le tableau USER
il y a une PRIMARY KEY (USER_ID)
qui est un BIGINT AUTOINCREMENT
(par conséquent, pourquoi vous ne le voyez pas dans la chaîne SQL_CREATE
Maintenant, je remplis le ?
en utilisant PreparedStatement.setXXXX(index, value)
. Je veux retourner ResultSet rs = PreparedStatement.getGeneratedKeys()
. Comment puis-je atteindre cet objectif?
Beaucoup de gens comprennent mal et utilisent PreparedStatement # executeUpdate (arg). Java doc indique 'Cette méthode avec argument ne peut pas être appelée sur PreparedStatement ou CallableStatement.' Cela signifie que nous devons utiliser executeUpdate() sans argument même si la méthode' executeUpdate (arg) 'peut être héritée dans la classe PreparedStatement mais nous n'avons pas pour l'utiliser sinon nous obtiendrons SQLException. – AmitG