Android:SQLite数据库插入成功但重复的错误消息

时间:2014-01-03 20:09:44

标签: android sql sqlite while-loop populate

显示的代码应该从文本文件中获取数据并将其插入数据库(目前只填充了1个表,其他插入循环已被注释掉)。

pieceTable的填充发生在ManipulateDatabase构造函数内的if语句中。目前,数据库已填满(因为select语句可以从中检索数据),但LogCat在向表中插入各种字符串时会显示重复错误。

我在下面添加了LogCat输出,但由于帖子中的字符限制,必须使用PasteBin附加代码:http://pastebin.com/aR6kA3u8

非常感谢任何有关错误来源的建议。

01-03 20:03:46.126: D/gralloc_goldfish(535): Emulator without GPU emulation detected.
01-03 20:04:20.085: E/SQLiteDatabase(535): Error inserting isPlay=1 piece=A View from the Bridge
01-03 20:04:20.085: E/SQLiteDatabase(535): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.ManipulateDatabase.<init>(ManipulateDatabase.java:576)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.Novel.onCreate(Novel.java:22)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.Activity.performCreate(Activity.java:4465)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.os.Looper.loop(Looper.java:137)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invokeNative(Native Method)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invoke(Method.java:511)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-03 20:04:20.085: E/SQLiteDatabase(535):  at dalvik.system.NativeStart.main(Native Method)
01-03 20:04:20.085: I/System.out(535): A View from the Bridge,1 THIS INSERTION SHOULD HAVE JUST FINISHED
01-03 20:04:20.115: E/SQLiteDatabase(535): Error inserting isPlay=1 piece=An Inspector Calls
01-03 20:04:20.115: E/SQLiteDatabase(535): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.ManipulateDatabase.<init>(ManipulateDatabase.java:576)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.Novel.onCreate(Novel.java:22)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.Activity.performCreate(Activity.java:4465)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.os.Looper.loop(Looper.java:137)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invokeNative(Native Method)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invoke(Method.java:511)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-03 20:04:20.115: E/SQLiteDatabase(535):  at dalvik.system.NativeStart.main(Native Method)
01-03 20:04:20.115: I/System.out(535): An Inspector Calls,1 THIS INSERTION SHOULD HAVE JUST FINISHED
01-03 20:04:20.145: E/SQLiteDatabase(535): Error inserting isPlay=0 piece=Of Mice and Men
01-03 20:04:20.145: E/SQLiteDatabase(535): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.ManipulateDatabase.<init>(ManipulateDatabase.java:576)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.Novel.onCreate(Novel.java:22)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.Activity.performCreate(Activity.java:4465)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.os.Looper.loop(Looper.java:137)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invokeNative(Native Method)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invoke(Method.java:511)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-03 20:04:20.145: E/SQLiteDatabase(535):  at dalvik.system.NativeStart.main(Native Method)
01-03 20:04:20.145: I/System.out(535): Of Mice and Men,0 THIS INSERTION SHOULD HAVE JUST FINISHED
01-03 20:04:20.186: E/SQLiteDatabase(535): Error inserting isPlay=0 piece=To Kill a Mockingbird
01-03 20:04:20.186: E/SQLiteDatabase(535): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.ManipulateDatabase.<init>(ManipulateDatabase.java:576)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at com.lawson.englishlitrevision.Novel.onCreate(Novel.java:22)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.Activity.performCreate(Activity.java:4465)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.os.Looper.loop(Looper.java:137)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invokeNative(Native Method)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at java.lang.reflect.Method.invoke(Method.java:511)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-03 20:04:20.186: E/SQLiteDatabase(535):  at dalvik.system.NativeStart.main(Native Method)
01-03 20:04:20.186: I/System.out(535): To Kill a Mockingbird,0 THIS INSERTION SHOULD HAVE JUST FINISHED
01-03 20:04:20.206: I/System.out(535): Of Mice and Men HAS JUST BEEN ADDED TO PIECE ARRAYLIST FETCHED FROM DB
01-03 20:04:20.206: I/System.out(535): To Kill a Mockingbird HAS JUST BEEN ADDED TO PIECE ARRAYLIST FETCHED FROM DB
01-03 20:04:20.246: D/dalvikvm(535): GC_CONCURRENT freed 228K, 4% free 9288K/9607K, paused 5ms+3ms

2 个答案:

答案 0 :(得分:2)

从第597行看,您看起来正在创建一个包含两个字符串的ContentValues对象。但是,该表的架构表示您有两列,一次是另一个整数。

这就是我要开始寻找的地方。

答案 1 :(得分:0)

您的piece列定义了PRIMARY KEY约束,强制唯一性。如果要避免这些异常,则需要使用insertWithOnConflict()方法指定自定义ON CONFLICT子句。

相关问题