2013-10-12 1 views
6

Я использую Anorm для запросов к базе данных в приложении Play. Я прошел через некоторые уроки, которые даны, что SQL(....).execute() возвращает Boolean, если исполнение было успешным. Я протестировал метод, но он всегда возвращался false (не знаю, когда он вернет true: /). Я также пробовал SQL(...).executeInsert(), но в таблице нет столбца «auto-increment», поэтому проблема все еще существует. Пожалуйста, помогите мне, если есть какое-либо решение (любая расширенная версия метода .execute() или другого) с кем-либо.Как узнать, что если запрос вставки был успешным в анормах?

Вот часть моего кода, который неисправный из-за неожиданное возвращение ...

def addSuggestion(sessionId: BigInteger, suggestionId: BigInteger) = { 
     DB.withConnection { implicit c => 
      if (!SQL("insert into user_suggestion_" + sessionId + " values (" + suggestionId + ",1,0,0)").execute()) { 
      SQL("update user_suggestion_" + sessionId + " set count=(count+1) where user_id=" + suggestionId).executeUpdate() 
      } 
     } 
     } 

Запрос обновления должен работать только тогда, когда вставка не удается (из-за какие-либо ограничения и т.д.). Есть ли другая функция/альтернатива? Пожалуйста помоги. Заранее спасибо.

ответ

7

Анонимный вызов функции .execute() для .execute() в классе .execute() класса jdbc PreparedStatement, который возвращает значение true, если результатом является ResultSet и false, если это «количество обновлений» или результат не вернулся, поэтому он не делает то, что вы ожидали от него.

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#execute()

я ожидал бы вставить, чтобы быть успешным, пока вызов выполнить() не бросать SqlException. (Вы можете проверить это довольно легко, пытаясь вставить запись с идентификатором, который у вас уже есть в таблице)

+0

Спасибо Johanandren .. Теперь я действительно понял эту функцию. Итак, нужно ли мне проверять успешную установку через обработку исключений? Нет ли простого способа? –

+0

Думайте об этом как о проверке исключительного поведения при обработке исключений :). Проверьте scala.util.Try, это может дать вам более удобный способ обработки этого исключения, чем попытка try-catch. – johanandren

-2

Вы должны использовать опцию [Long]

val status:Option[Long]=SQL("insert into user_suggestion_" + sessionId + " values (" + suggestionId + ",1,0,0)").execute() 

здесь переменная состояния имеет значений истина или ложь.

+0

Извините Ravi, но метод 'execute()' возвращает только 'Boolean'. Это не решает проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^