2012-08-29 9 views
9

gehen Wenn ich diesen Code ausführen ich innerhalb des db.insert haben eine Ausnahme:SQLiteConstraintException nicht innerhalb Fang

08-29 15:40:17.519: E/SQLiteDatabase(3599): android.database.sqlite.SQLiteConstraintException: column date is not unique (code 19) 

was normal ist, weil ich schon diesen Wert als Schlüssel. Also in diesem Fall mache ich einen Haken von SQLiteConstraintException, aber ich bekomme nie in den Fang, wenn ich den Code ausführen.

Was mache ich falsch?

  try { 
       db.insert(TABLE_STATISTICS, null, values); 
      } catch (SQLiteConstraintException e) { 
       Log.d("entered", "entered the exception"); 
       ContentValues valuesUp = new ContentValues(); 
       valuesUp.put((isMT ? KEY_MT : KEY_MO), change); 
       db.update(TABLE_STATISTICS, valuesUp, KEY_DATE + "=?", 
         new String[] { message_date }); 
      } 

Vielen Dank.

das ganze Protokoll:

08-29 15:55:55.870: E/SQLiteDatabase(3828): Error inserting MO=0 date=2012-08-08 MT=1 
08-29 15:55:55.870: E/SQLiteDatabase(3828): android.database.sqlite.SQLiteConstraintException: column date is not unique (code 19) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at xx.xxx.xxx.xx.xxxx.StatisticsHolderDay.updateCounterNextStep(StatisticsHolderDay.java:124) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at xx.xxx.xxx.xx.xxxx.StatisticsHolderDay.updateCounter(StatisticsHolderDay.java:102) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at xx.xxx.xxx.xx.xxxx.LastMonthActivity.onStart(LastMonthActivity.java:146) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.Activity.performStart(Activity.java:5018) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.os.Looper.loop(Looper.java:137) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-29 15:55:55.870: E/SQLiteDatabase(3828):  at dalvik.system.NativeStart.main(Native Method) 
+0

Sind Sie sicher, dass der Fehler von diesem Einsatz stammt? Veröffentlichen Sie bitte das gesamte Logbuch. – iTurki

+0

@iturki hat die Hauptfrage mit dem gesamten Log aktualisiert. StatisticsHolderDay.java:124 ist wie, wo ich die Einfügung auf die Frage mache. – Mano

Antwort

13

Verwenden db.insertOrThrow() statt.

+0

Vielen Dank! – Mano