La seule façon pour certains pilotes JDBC de revenir Statement.RETURN_GENERATED_KEYS
est 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 PreparedStatement
considé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 USER
tableau, 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_CREATE
String.
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.