Maison >base de données >tutoriel mysql >Comment récupérer efficacement l'ID d'insertion dans JDBC ?
Obtenir efficacement l'ID d'insertion dans JDBC
Lors de l'insertion de données dans une table de base de données à l'aide de JDBC, vous devez souvent obtenir la clé générée (ou l'ID d'insertion), qui identifie l'enregistrement nouvellement ajouté. JDBC fournit un mécanisme pour récupérer efficacement cet ID.
Utiliser la déclaration#getGeneratedKeys()
Pour les clés générées automatiquement, JDBC fournit la méthode Statement#getGeneratedKeys()
. Cette méthode est appelée sur la même instruction qui effectue l'opération INSERT. Pour activer la génération de clés, l'instruction doit être créée avec le drapeau Statement.RETURN_GENERATED_KEYS
.
<code class="language-java">public void create(User user) throws SQLException { try ( Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS); ) { statement.setString(1, user.getName()); statement.setString(2, user.getPassword()); statement.setString(3, user.getEmail()); // ... int affectedRows = statement.executeUpdate(); if (affectedRows == 0) { throw new SQLException("创建用户失败,没有影响行。"); } try (ResultSet generatedKeys = statement.getGeneratedKeys()) { if (generatedKeys.next()) { user.setId(generatedKeys.getLong(1)); } else { throw new SQLException("创建用户失败,未获得 ID。"); } } } }</code>
Compatibilité des pilotes
Le succès de cette approche dépend de la prise en charge des pilotes JDBC. La plupart des pilotes JDBC modernes prennent en charge cette fonctionnalité, notamment MySQL, DB2 et PostgreSQL. Cependant, le pilote Oracle JDBC peut encore présenter des limitations dans ce domaine.
Alternatives Oracle
Pour Oracle, pensez à utiliser CallableStatement
ou une requête SELECT avec une clause RETURNING pour récupérer la dernière clé générée.
<code class="language-sql">"{? = call INSERT_FUNCTION(?, ?, ?)}"</code>
Placeholder ?
représente une variable contenant l'ID d'insertion.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!