Обновите и выберите в одном запросе. Ошибка синтаксиса SQL в Scala

0

Я пытаюсь запросить базу данных, используя следующий запрос. Он отлично работает, когда я запускаю запрос на сервере 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.

  • 1
    Что смущает? Вы вызываете executeupdate со строкой, содержащей несколько операторов. Это не функция интерфейса записи.
  • 0
    Спасибо за ответ, я это понимаю. Я был сбит с толку о том, как выполнить несколько операторов. Я решил это с помощью транзакции. Я хотел знать, есть ли лучший подход.
Теги:
sql-update

1 ответ

0

Statement.executeupdate(String) принимает только один оператор, но вы предоставили два.

См. Документы на странице https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String).

В этом вопросе обсуждаются варианты выполнения нескольких операторов в одном обозревателе с JDBC: два разных подготовленных оператора в одной партии

  • 0
    Спасибо за ответ. Использование транзакции решило мою проблему. Мне пришлось написать 2 разных запроса и выполнить его.

Ещё вопросы

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