android中操作SQLite常见错误
2013-10-02 21:26
417 查看
1. android.database.sqlite.SQLiteException: unable to close due to unfinalised statements[java]view plaincopyFATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.evaluation/com.evaluation.VehicleActivity}: android.database.sqlite.SQLiteException: unable to close due to unfinalised statements
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
at android.app.ActivityThread.access$2300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to close due to unfinalised statements
at android.database.sqlite.SQLiteDatabase.dbclose(Native Method)
at android.database.sqlite.SQLiteDatabase.onAllReferencesReleased(SQLiteDatabase.java:363)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.onAllReferencesReleased(SQLiteProgram.java:116)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.close(SQLiteProgram.java:293)
at android.database.sqlite.SQLiteQuery.close(SQLiteQuery.java:133)
at android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:532)
at com.DatabaseHelper.selectAssessInformation(DatabaseHelper.java:338)
at com.JSKApplication.selectAssessInformation(JSKApplication.java:631)
at com.VehicleActivity.onCreate(VehicleActivity.java:548)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
... 11 more
这个错误翻译过来就是:不能关闭数据库由于未完成的语句。我从网上查了一下,最可能的原因是:你在操作sqlite数据库时使用多线程了,但sqlite数据库是不支持多线程操作,所以你必须实现多线程同步的机制。我的程序出错是因为:在后台启动了个service定时向服务器请求数据,并在线程中将数据插入数据库。在某个时间段,用户在向数据库插入数据后,关闭数据库,而此时线程正在向数据库中写入数据,就会造成上述异常。
2.android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
[java]view plaincopy07-0416:18:56.677: W/System.err(29830): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
约束失败,导致这类错误,原因一般有两个:1)插入的数据有一个是主键,而且插入的主键相同;2)插入的数据有一条数据为空,而数据库中定义不能为空,也会导致这样的错误;
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.evaluation/com.evaluation.VehicleActivity}: android.database.sqlite.SQLiteException: unable to close due to unfinalised statements
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
at android.app.ActivityThread.access$2300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to close due to unfinalised statements
at android.database.sqlite.SQLiteDatabase.dbclose(Native Method)
at android.database.sqlite.SQLiteDatabase.onAllReferencesReleased(SQLiteDatabase.java:363)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.onAllReferencesReleased(SQLiteProgram.java:116)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.close(SQLiteProgram.java:293)
at android.database.sqlite.SQLiteQuery.close(SQLiteQuery.java:133)
at android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:532)
at com.DatabaseHelper.selectAssessInformation(DatabaseHelper.java:338)
at com.JSKApplication.selectAssessInformation(JSKApplication.java:631)
at com.VehicleActivity.onCreate(VehicleActivity.java:548)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
... 11 more
这个错误翻译过来就是:不能关闭数据库由于未完成的语句。我从网上查了一下,最可能的原因是:你在操作sqlite数据库时使用多线程了,但sqlite数据库是不支持多线程操作,所以你必须实现多线程同步的机制。我的程序出错是因为:在后台启动了个service定时向服务器请求数据,并在线程中将数据插入数据库。在某个时间段,用户在向数据库插入数据后,关闭数据库,而此时线程正在向数据库中写入数据,就会造成上述异常。
2.android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
[java]view plaincopy07-0416:18:56.677: W/System.err(29830): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
约束失败,导致这类错误,原因一般有两个:1)插入的数据有一个是主键,而且插入的主键相同;2)插入的数据有一条数据为空,而数据库中定义不能为空,也会导致这样的错误;
相关文章推荐
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- android USB如何修改VID具体实现
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- 深入理解linux中close与shutdown的区别
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- PHP中header和session_start前不能有输出原因分析
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解
- Android 各国语言缩写及简称详细介绍
- Android 自动判断是电话,网址,EMAIL方法之Linkify的使用
- android IPC之binder通信机制
- Android应用开发中模拟按下HOME键的效果(实现代码)
- Android 读写文件方法汇总