Это относится к идентификатору типа MySQL и UUID
для которого я использую функцию uuid()
самого MySQL. Это дает мне не null resultSet
, но next()
значение всегда пустое.
Ниже приведен код:
String insertQuery = "INSERT INTO fixtures "
+ "(id, whatever1, whatever2, whatever3, whatever4, "
...
+ "created_at) "
+ "VALUES(UUID(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(insertQuery, Statement.RETURN_GENERATED_KEYS);
.
.
.
preparedStatement.setDate(23, sqlDate);
preparedStatement.executeUpdate();
ResultSet keysResultSet = preparedStatement.getGeneratedKeys();
System.out.println(keysResultSet); // com.mysql.cj.jdbc.result.ResultSetImpl@6892b3b6
if(keysResultSet != null && keysResultSet.next()){
System.out.println("Generated Emp Id: "+keysResultSet.getString("id"));
} else {
System.out.println("No KEYS GENERATED");
}
Для SQL Server 2008 и более поздних версий вы можете определить первичный ключ, используя автоматически сгенерированный UUID. Чтобы получить UUID, сгенерированный оператором INSERT, добавьте опцию OUTPUT после определения столбца и замените свой Statement.executeUpdate для Statement.executeQuery и извлеките значение из ResultSet. Вот фрагмент кода, показывающий, как это сделать:
sqlStmt.append("INSERT INTO tableName");
sqlStmt.append(" (column1");
sqlStmt.append(", column2");
...
sqlStmt.append(" OUTPUT inserted.columnUUID");
sqlStmt.append(" VALUES (?, ?, ?, ?) ");
statement = connection.prepareStatement(sqlStmt.toString());
statement.clearParameters();
int index = 0;
ResultSet resultSet = statement.executeQuery();
if (resultSet.next())
{
result = resultSet.getString(1);
companyDB.varUUID = result;
}
Нет ключа, генерируемого, но фактически предоставленного:
Поэтому либо оставите создание в базе данных:
String insertQuery = "INSERT INTO fixtures "
+ "(whatever1, whatever2, whatever3, whatever4, "
...
+ "created_at) "
+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, "
+ "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
Поскольку я не знаю, как легко достичь UUID на стороне MySQL, я бы предложил оригинальное решение с UUID на стороне java:
String insertQuery = "INSERT INTO fixtures "
+ "(id, whatever1, whatever2, whatever3, whatever4, "
...
+ "created_at) "
+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?, "
+ "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
UUID id = UUID.randomUUID();
preparedStatement.setString(1, id.toString());
Получение UUID становится неуместным.
String yourSQL="insert into Table1(Id,Col2,Col3) values(SEQ.nextval,?,?)";
Кроме того, идентификатор предоставлен так же, как я делаю. Но это все еще возвращает resultSet.