最近在改应用的一些bug,想起来可以把常见错误整理下,方便自己下次更快速找出错误原因,也给遇到同样问题的同学提供解决思路。我会将错误归类,今天先写一点,以后再增加,欢迎指正。(为了不透漏一些信息,log中包名被修改了)
1. android.database.sqlite.SQLiteException:unabletocloseduetounfinalisedstatements
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定时向服务器请求数据,并在线程中将数据插入数据库。在某个时间段,用户在向数据库插入数据后,关闭数据库,而此时线程正在向数据库中写入数据,就会造成上述异常。
2.
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
07-04 16:18:56.677: W/System.err(29830): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
约束失败,导致这类错误,原因一般有两个:
1)插入的数据有一个是主键,而且插入的主键相同;
2)插入的数据有一条数据为空,而数据库中定义不能为空,也会导致这样的错误;
分享到:
相关推荐
android studio1.2 sqlite的操作 测试通过 转:http://www.jb51.net/article/36062.htm 这个例子的基础上修改
很实用的sqlite数据库操作代码,注释比较全面,还结合了listview组件。
Android操作SQLite数据库Demo,实现对数据库的创建,升级,增删查改,用子线程做,避免主线程阻塞。(用Android Studio打开)
android操作数据库sqllite源代码,有需要的朋友可以拿走
Android中使用SQLite示例,详情可以参见博客:http://www.cnblogs.com/plokmju/p/android_SQLite.html
Android实验报告Sqlite数据库操作.pdf
它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 为什么要用 ...
Android 操作 sqlite 数据库增加修改删除 Android 操作 sqlite 数据库增加修改删除 Android 操作 sqlite 数据库增加修改删除
Android 操作 SQLite数据库 Android 操作 SQLite数据库 Android 操作 SQLite数据库
Android 数据库SQLite 详解,简单学好SQLite
Android数据存储SQLite - 事务操作
android 6.0 可用 sqlite3 和so文件 adb push D:\temp\android_arm_sqlite3\libsqlite_jni.so /system/lib/ adb push D:\temp\android_arm_sqlite3\libsqlite.so /system/lib/ adb push D:\temp\android_arm_sqlite...
android sqlite操作 demo
Android之Sqlite数据库操作实例
Android操作sqlite完整工程,包括工具类
android对sqlite数据库的操作
Android数据库SQLite基本操作工程,最简单的增删改查方法。
android Sqlite 基本操作 包含基本增删改插操作
在Android studio上实现了sqlite的数据的新建、查询、添加、删除等功能。
利用Android自有api操作sqlite数据库.让不熟悉sql语句的程序员参考