6

Play アプリケーションでデータベース クエリに Anorm を使用しています。SQL(....).execute()実行が成功した場合に返されるいくつかのチュートリアルを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()
          }
        }
      }

更新クエリは、挿入が失敗した場合にのみ実行する必要があります (制約などにより)。他の機能/代替手段はありますか? 助けてください。前もって感謝します。

4

2 に答える 2

7

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

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

execute() 呼び出しが SqlException をスローしない限り、挿入は成功すると思います。(テーブルに既にある ID を持つエントリを挿入しようとすることで、これを非常に簡単に確認できます)

于 2013-10-14T14:05:23.323 に答える