Я пытаюсь запросить базу данных, используя следующий запрос. Он отлично работает, когда я запускаю запрос на сервере mysql. Но когда я запускаю тот же запрос в scala, он вызывает ошибку.
Я хочу получить одну строку в db, чей cid_status является "unreserved", а cid_curprocess - "process1" и обновляет тот же cid_status до "reserved" и возвращает cid_issueid этой строки
Ниже приведен запрос.
val query = "SET @LastUpdateID: = 0; UPDATE table_details INNER JOIN (SELECT cid_issueid FROM cen_issue_details WHERE cid_curprocess = 'process1' И cid_status = 'unreserved' LIMIT 1) AS final ON cen_issue_details.cid_issueid = final.cid_issueid SET cen_issue_details.cid_status = 'reserved', cen_issue_details.cid_issueid = (SELECT @LastUpdateID: = cen_issue_details.cid_issueid); SELECT @LastUpdateID AS LastUpdateID;
val rs = statement.executeUpdate(query)
Я получаю следующую ошибку:
Исключение в потоке "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "UPDATE table_details INNER JOIN (SELECT cid_issueid FROM cen_issue_details W" в строке 1
Также я не уверен, следует ли использовать executeUpdate или executeQuery, поскольку запрос выполняет как SELECT, так и UPDATE.
Statement.executeupdate(String)
принимает только один оператор, но вы предоставили два.
См. Документы на странице https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String).
В этом вопросе обсуждаются варианты выполнения нескольких операторов в одном обозревателе с JDBC: два разных подготовленных оператора в одной партии
executeupdate
со строкой, содержащей несколько операторов. Это не функция интерфейса записи.