2013-10-12 17 views
6

Oyunumda veritabanı sorguları için Anorm kullanıyorum. Yürütme başarılı olursa, SQL(....).execute()'un Boolean döndürdüğü bazı öğreticilerden geçtim. Yöntemi test ettim, ancak her zaman false'u döndü (doğru döndüğünde ne olduğunu bilmiyorum: /). Ayrıca SQL(...).executeInsert()'u denedim, ancak tabloda herhangi bir 'otomatik artış' sütunu yok, bu nedenle sorun hala var. Herhangi bir çözüm varsa ('.execute()' yönteminin veya diğer herhangi birinin genişletilmiş sürümü varsa) bana yardımcı olun. İşte Ekleme sorgusu anorm'da başarılı olsaydı nasıl bilinir?

... beklenmedik dönüşü nedeniyle başarısız oluyor benim kod parçasıdır

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() 
      } 
     } 
     } 

yerleştirme (vb bağlı herhangi kısıtlama kadar) başarısız olduğunda güncelleştirme sorgusu yalnızca çalışmalıdır. Başka bir işlev/alternatif var mı? Lütfen yardım et. Şimdiden teşekkürler.

cevap

7

Anorm çağrısı .execute() delegeleri, jdbc PreparedStatement sınıfında .execute() ifadesiyle sonuçlanır; sonuç, sonuç bir ResultSet ise ve bir "güncelleştirme sayısı" ise veya yanlış sonuç gelmezse false döndürürse, Beklediğiniz şeyi yapmaz.

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

ben ekleme sürece yürütmek() çağrısı bir SQLException atmadım olarak başarılı olmak için beklenebilir. (Bu tabloyu kullanmakta olduğunuz bir kimliğe sahip bir giriş eklemeye çalışarak bunu kolayca kolayca doğrulayabilirsiniz)

+0

Teşekkürler Johanandren .. Şimdi aslında işlevi anladım. Yani, Exception Handling aracılığıyla başarılı bir ekleme olup olmadığını kontrol etmek zorunda mıyım? Basit bir yolu yok mu? –

+0

İstisnai davranışı istisna davranışını kontrol etmek olarak düşünün :). Scala.util.Try'e göz atın, bu istisnayı daha iyi bir şekilde yakalama denemesine yol açabilir. – johanandren

-2

Sen Seçenek [Uzun] burada

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

durum değişken doğru veya yanlış değerlere sahip kullanmalıdır.

+0

Üzgünüm Ravi, ancak 'execute()' yöntemi yalnızca 'Boolean' değerini döndürür. Bu problemi çözmez. –