Maison >base de données >tutoriel mysql >Comment récupérer efficacement l'ID d'insertion dans JDBC ?

Comment récupérer efficacement l'ID d'insertion dans JDBC ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-23 18:48:11789parcourir

How to Efficiently Retrieve the Insert ID in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn