Microsoft JDBC Driver for SQL Server では、自動的に生成された行識別子を取得する JDBC 3.0 API がオプションでサポートされます。 この機能の主な価値は、クエリとサーバーへの 2 回目のラウンド トリップを必要とせずにデータベース テーブルを更新するアプリケーションで IDENTITY 値を使用できるようにする方法を提供することです。
SQL Server識別子の擬似列をサポートしていないため、自動生成キー機能を使う更新はIDENTITY列を含むテーブルに対して動作しなければなりません。 SQL Serverでは、テーブルごとに 1 つのIDENTITY列のみを使用できます。
SQLServerStatementクラスのgetGeneratedKeysメソッドで返される結果セットは、列名がGENERATED_KEYSの1カラムのみです。 JDBC Driver 13.6以降、 IDENTITY 値を生成しない文に対して生成キーが要求された場合、ドライバはnullでない空の結果セットを返し、 ResultSet.next() は falseを返します。
例として、AdventureWorks2025 サンプル データベースに次の表を作成します。
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
次の例では、AdventureWorks2025 サンプル データベースへのオープン接続が関数に渡され、テーブルにデータを追加する 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();
}
}