灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3321回复:0

android中操作SQLite常见错误

楼主#
更多 发布于:2012-09-06 14:05


最近在改应用的一些bug,想起来可以把常见错误整理下,方便自己下次更快速找出错误原因,也给遇到同样问题的同学提供解决思路。我会将错误归类,今天先写一点,以后再增加,欢迎指正。(为了不透漏一些信息,log中包名被修改了)
1.
[java]
FATAL 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定时向服务器请求数据,并在线程中将数据插入数据库。在某个时间段,用户在向数据库插入数据后,关闭数据库,而此时线程正在向数据库中写入数据,就会造成上述异常。
作者:zj_133


喜欢0 评分0
游客

返回顶部