La seule façon pour certains pilotes JDBC de revenir Statement.RETURN_GENERATED_KEYSest d'effectuer l'une des opérations suivantes:
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);
}
Y a-t-il un moyen de faire la même chose avec PreparedStatement?
Éditer
La raison pour laquelle j'ai demandé si je pouvais faire de même avec PreparedStatementconsidérez le scénario suivant:
private static final String SQL_CREATE =
"INSERT INTO
USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB)
VALUES (?, ?, ?, ?, ?)";
Dans le USERtableau, il y a un PRIMARY KEY (USER_ID)qui est un BIGINT AUTOINCREMENT(d'où la raison pour laquelle vous ne le voyez pas dans SQL_CREATEString.
Maintenant, je renseigne l' ?utilisation PreparedStatement.setXXXX(index, value). Je veux revenir ResultSet rs = PreparedStatement.getGeneratedKeys(). Comment puis-je atteindre cet objectif?
This method with argument cannot be called on a PreparedStatement or CallableStatement.cela signifie que nous devons utiliser executeUpdate () sans argument même si laexecuteUpdate(arg)méthode peut être héritée dans la classe PreparedStatement mais nous n'avons pas à l'utiliser sinon nous obtiendrons SQLException.