Otomatik oluşturulan anahtarları kullanma

JDBC sürücüsünü indirin

SQL Server için Microsoft JDBC Sürücüsü, otomatik olarak oluşturulan satır tanımlayıcılarını almak için isteğe bağlı JDBC 3.0 API'lerini destekler. Bu özelliğin temel değeri, bir sorgu ve sunucuya ikinci bir gidiş dönüş gerektirmeden veritabanı tablosunu güncelleştiren bir uygulama için değerleri kullanılabilir hale getirmenin IDENTITY bir yolunu sağlamaktır.

SQL Server, tanımlayıcılar için sözde sütunları desteklemediğinden, otomatik oluşturulan anahtar özelliğini kullanan güncellemeler, bir IDENTITY sütun içeren bir tabloya karşı çalışmalıdır. SQL Server tablo başına yalnızca tek IDENTITY bir sütuna izin verir. SQLServerStatement sınıfının getGeneratedKeys yöntemiyle döndürülen sonuç kümesi, sütun adı olan yalnızca bir sütundan GENERATED_KEYSoluşur. JDBC Driver 13.6’dan itibaren, IDENTITY değeri üretmeyen bir ifade için üretilen anahtarlar istenirse, sürücü null olmayan boş bir sonuç kümesi döndürür ve ResultSet.next(), false döndürür.

Örneğin, AdventureWorks2025 örnek veritabanında aşağıdaki tabloyu oluşturun:

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

Aşağıdaki örnekte, AdventureWorks2025 örnek veritabanına açık bir bağlantı işleve geçirilir, tabloya veri ekleyecek bir SQL deyimi oluşturulur ve ardından deyimi çalıştırılır ve IDENTITY sütun değeri görüntülenir.

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();
    }
}