次の方法で共有


自動生成キーの使用

JDBC ドライバーのダウンロード

Microsoft JDBC Driver for SQL Server では、自動的に生成された行識別子を取得する JDBC 3.0 API がオプションでサポートされます。 この機能の主な重要性は、クエリ、およびサーバーに対する 2 回目のラウンドトリップを要求することなく、データベース テーブルを更新するアプリケーションで IDENTITY 値を利用できることです。

SQL Server では識別子の擬似列をサポートしていないため、自動生成キー機能を使用する必要のある更新は、IDENTITY 列を含むテーブルに対して実行する必要があります。 SQL Server で許可されるのは 1 つのテーブルにつき 1 つの IDENTITY 列だけです。 SQLServerStatement クラスの getGeneratedKeys メソッドによって返される結果セットは 1 列だけで構成され、返される列名は GENERATED_KEYS です。 生成されたキーが IDENTITY 列のないテーブルで要求された場合、JDBC ドライバーは null の結果セットを返します。

例として、AdventureWorks2022 サンプル データベースで次のテーブルを作成します。

CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);  

次の例では、AdventureWorks2022 サンプル データベースへのオープン接続が関数に渡され、テーブルにデータを追加する SQL ステートメントが構築され、ステートメントが実行され、IDENTITY 列の値が表示されます。

public static void executeInsertWithKeys(Connection con) {
    try(Statement stmt = con.createStatement();) {
        String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
        int count = stmt.executeUpdate(SQL, Statement.RETURN_GENERATED_KEYS);
        ResultSet rs = stmt.getGeneratedKeys();

        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        if (rs.next()) {
            do {
                for (int i=1; i<=columnCount; i++) {
                    String key = rs.getString(i);
                    System.out.println("KEY " + i + " = " + key);
                }
            } while(rs.next());
        }
        else {
            System.out.println("NO KEYS WERE GENERATED.");
        }
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

関連項目

JDBC ドライバーでのステートメントの使用