getGeneratedKeys () не работает, когда запрос SELECT находится перед запросом вставки

0

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);
        }
Теги:
jdbc

2 ответа

2
Лучший ответ

Я не знаю, поможет ли этот ответ решить вашу проблему, но возможно вставить вашу вставку как одно утверждение:

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

Есть две альтернативы без переменной:

"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)"

Поскольку драйвер, кажется, не обрабатывает многократные заявления, хорошо. Вы также можете попытаться удалить последнюю точку с запятой ; ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню