2016-09-27 6 views
-1

2つの表の間にダーティー・フラグを同期しようとしています。フォームには複数のAnswersが関連付けられています。これらの回答のいずれかが汚れているとマークされている場合は、そのフォームにも汚れが付いているようにしたいと思います。以下は私が現在試みているもので、うまくいかないものです。ここでSQLiteトリガーを使用してダーティー・フラグを同期

db.execSQL("CREATE TRIGGER IF NOT EXISTS markFormDirtyIfAnswerDirty AFTER UPDATE ON Answer WHEN isDirty=true " + 
      "BEGIN " + 
      "UPDATE Form SET dirty=true WHERE _id=OLD.formId; " + 
      "END "); 

は私が取得エラーです:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myappmobile.test/com.myapp.myappmobile.activities.DashboardActivity_}: java.lang.IllegalStateException: getDatabase called recursively 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5343) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
                      Caused by: java.lang.IllegalStateException: getDatabase called recursively 
+0

エラーメッセージを秘密にしていただきありがとうございます。 –

+0

申し訳ありません。元の質問に追加しました –

答えて

0

私は解決策を見つけました。 SQLiteはtrueとfalseをサポートしていません。代わりに1と0を使用する必要があります。また、ダーティーフラグをチェックするときにNEWリファレンスを使用する必要がありました。正しい応答は以下のようになります。

 db.execSQL("CREATE TRIGGER IF NOT EXISTS markFormDirtyIfAnswerDirty AFTER UPDATE ON Answer WHEN NEW.isDirty=1 " + 
      "BEGIN " + 
      "UPDATE Form SET dirty=1 WHERE _id=OLD.formId; " + 
      "END "); 
関連する問題