2013-10-12 3 views
6

私はPlayアプリケーションでデータベースクエリにAnormを使用しています。実行が成功した場合、がBooleanを返すというチュートリアルを行った。私はメソッドをテストしましたが、常にfalseを返しました(trueを返すときは分かりません)。私もSQL(...).executeInsert()を試しましたが、テーブルに「自動インクリメント」カラムがないので、問題はまだ存在します。任意のソリューション(拡張された '.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

jdbc PreparedStatementクラスの.execute()へのAnorm呼び出しは、結果がResultSetの場合はtrueを返し、「更新カウント」の場合はfalseを返します。それはあなたが期待したことをしません。

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

私は、インサートは限り実行()呼び出しは、SQLExceptionをスローしませんでしたとして成功することを期待します。 (あなたがテーブルに持っているIDを持つエントリを挿入しようとすると、これを簡単に確認できます)

+0

ありがとうJohanandren ..今私は実際に関数を理解しています。だから、例外処理を使って挿入が成功したかどうかチェックする必要がありますか?単純な方法はありませんか? –

+0

例外処理で例外的な動作をチェックすると考えてください:)。 scala.util.Tryをチェックすると、try-catchよりも優れた処理方法が得られるかもしれません。 – johanandren

-2

あなたがここにオプション[ロング]

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

を使用する必要があり、状態変数は、真または偽の値を持っています。

+0

残念ですが、 'execute()'メソッドは 'Boolean'だけを返します。それは問題を解決しません。 –

関連する問題