次の方法で共有


自動生成キーの使用

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

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

たとえば、SQL Server 2005 AdventureWorks サンプル データベースで次のテーブルを作成します。

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

次の例は、AdventureWorks サンプル データベースに対して開いている接続を関数に渡して、テーブルにデータを追加する SQL ステートメントを作成および実行し、IDENTITY 列の値を出力します。

public static void executeInsertWithKeys(Connection con) {
   try {
      String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
      Statement stmt = con.createStatement();
      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.");
      }
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

参照

その他の技術情報

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