preparedStatement.getGeneratedKeys()
прекрасно работает, когда запрос представляет собой только одну инструкцию MySQL INSERT, но если в запросе несколько операторов, он не будет возвращать идентифицированные идентификаторы, т.е. test
имеет (ID (PK, auto_increment), Name, Loan ) столбцы:
sqlQuery = "SET @Loan = (SELECT Loan FROM customers WHERE CID = 4);"
+ "INSERT INTO test(Name, Loan) VALUES('jihad', @Loan);";
PreparedStatement st = connection.prepareStatement(sqlQuery, Statement.RETURN_GENERATED_KEYS);
st.executeUpdate();
ResultSet rs = st.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1);
System.out.println("Generated ID: "+ id);
}
Я не знаю, поможет ли этот ответ решить вашу проблему, но возможно вставить вашу вставку как одно утверждение:
sqlQuery = "INSERT INTO test (Name, Loan) ";
sqlQuery += "SELECT 'jihad', (SELECT Loan FROM customers WHERE CID = 4)";
PreparedStatement st = connection.prepareStatement(sqlQuery, Statement.RETURN_GENERATED_KEYS);
st.executeUpdate();
Есть две альтернативы без переменной:
"INSERT INTO test(Name, Loan) VALUES('jihad', (SELECT Loan FROM customers WHERE CID = 4))"
"INSERT INTO test(Name, Loan) (SELECT 'jihad', Loan FROM customers WHERE CID = 4)"
Поскольку драйвер, кажется, не обрабатывает многократные заявления, хорошо. Вы также можете попытаться удалить последнюю точку с запятой ;
,