2012-08-29 14 views
9

Cuando ejecutar ese código que tengo dentro de la db.insert una excepción:SQLiteConstraintException no vayas en el interior de captura

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

lo cual es normal, porque ya tengo ese valor como clave. Entonces, en ese caso hago una captura de SQLiteConstraintException pero nunca me meto en el enganche cuando ejecuto el código.

¿Qué estoy haciendo mal?

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

Gracias.

el conjunto de registro:

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

¿Está seguro de que el error proviene de este inserto? Publica todo el registro por favor. – iTurki

+0

@iturki actualizó la pregunta principal con todo el registro. StatisticsHolderDay.java:124 es similar a donde hago la inserción en la pregunta. – Mano

Respuesta

13

Uso db.insertOrThrow() lugar.

+0

¡Muchas gracias! – Mano

Cuestiones relacionadas