Heim >Datenbank >MySQL-Tutorial >Wie kann ich die Einfügungs-ID in JDBC effizient abrufen?

Wie kann ich die Einfügungs-ID in JDBC effizient abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-23 18:48:11787Durchsuche

How to Efficiently Retrieve the Insert ID in JDBC?

Effiziente Einfügungs-ID in JDBC erhalten

Beim Einfügen von Daten in eine Datenbanktabelle mithilfe von JDBC müssen Sie häufig den generierten Schlüssel (oder die Einfügungs-ID) abrufen, der den neu hinzugefügten Datensatz identifiziert. JDBC bietet einen Mechanismus zum effizienten Abrufen dieser ID.

Verwenden Sie Statement#getGeneratedKeys()

Für automatisch generierte Schlüssel stellt JDBC die Methode Statement#getGeneratedKeys() bereit. Diese Methode wird in derselben Anweisung aufgerufen, die die INSERT-Operation ausführt. Um die Generierung von Schlüsseln zu ermöglichen, muss die Anweisung mit dem Flag Statement.RETURN_GENERATED_KEYS erstellt werden.

<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>

Treiberkompatibilität

Der Erfolg dieses Ansatzes hängt von der JDBC-Treiberunterstützung ab. Die meisten modernen JDBC-Treiber unterstützen diese Funktion, einschließlich MySQL, DB2 und PostgreSQL. Allerdings kann der Oracle JDBC-Treiber in diesem Bereich noch Einschränkungen aufweisen.

Oracle-Alternativen

Erwägen Sie für Oracle die Verwendung von CallableStatement oder einer SELECT-Abfrage mit einer RETURNING-Klausel, um den zuletzt generierten Schlüssel abzurufen.

<code class="language-sql">"{? = call INSERT_FUNCTION(?, ?, ?)}"</code>

Platzhalter ? stellt eine Variable dar, die die Einfügungs-ID enthält.

Das obige ist der detaillierte Inhalt vonWie kann ich die Einfügungs-ID in JDBC effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn