Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер Microsoft JDBC для SQL Server поддерживает необязательные интерфейсы API JDBC 3.0 для получения автоматически создаваемых идентификаторов строк. Основное преимущество этой функции заключается в том, что она позволяет сделать значения IDENTITY доступными приложению, которое обновляет таблицу базы данных, без необходимости выполнять запрос и второе обращение к серверу.
Поскольку SQL Server не поддерживает псевдостолбцы для идентификаторов, обновления с функцией автогенерации ключа должны работать с таблицей, содержащей столбцIDENTITY. SQL Server допускает только один IDENTITY столбец для каждой таблицы. Набор результатов, возвращаемый методом getGeneratedKeys класса SQLServerStatement , имеет только один столбец с именем GENERATED_KEYSстолбца . Начиная с 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();
}
}