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