加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3_open_v2("/data/data/com.xxx.xxx/databases/xx

发布时间:2020-12-12 19:45:11 所属栏目:百科 来源:网络整理
导读:最近做的一个项目需要适配android 2.3.3平台,在项目导入阶段遇到一个数据库的问题,在此记录下问点log和初步解决方案。 看log I/Database( 1135): sqlite returned: error code = 14,msg = cannot open file at source line 25467 E/Database( 1135): sqlit

最近做的一个项目需要适配android 2.3.3平台,在项目导入阶段遇到一个数据库的问题,在此记录下问点log和初步解决方案。

看log

I/Database( 1135): sqlite returned: error code = 14,msg = cannot open file at source line 25467
E/Database( 1135): sqlite3_open_v2("/data/data/com.xxx.bluetooth/databases/bt_contact.db",&handle,6,NULL) failed
D/AndroidRuntime( 1135): Shutting down VM
W/dalvikvm( 1135): threadid=1: thread exiting with uncaught exception (group=0x40139560)
E/AndroidRuntime( 1135): FATAL EXCEPTION: main
E/AndroidRuntime( 1135): android.database.sqlite.SQLiteException: unable to open database file
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
E/AndroidRuntime( 1135): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:554)
E/AndroidRuntime( 1135): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
E/AndroidRuntime( 1135): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
E/AndroidRuntime( 1135): at com.xxx.bluetooth.ContactProvider.query(ContactProvider.java:447)
E/AndroidRuntime( 1135): at android.content.ContentProvider$Transport.query(ContentProvider.java:187)
E/AndroidRuntime( 1135): at android.content.ContentResolver.query(ContentResolver.java:262)
E/AndroidRuntime( 1135): at com.xxx.bluetooth.BlueToothService.setManagerAddrList(BlueToothService.java:999)
E/AndroidRuntime( 1135): at com.xxx.bluetooth.BlueToothService$1.handleMessage(BlueToothService.java:276)
E/AndroidRuntime( 1135): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1135): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 1135): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime( 1135): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1135): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1135): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
E/AndroidRuntime( 1135): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
E/AndroidRuntime( 1135): at dalvik.system.NativeStart.main(Native Method)


通过log内容最后锁定的代码部分是

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

可以肯定的是数据库文件的打开出了问题,因此网上看了一圈,发现很多人都遇到了,不过很多都是不了了之了。

但是也还是有收获的,那就是起码可以初步确认是数据库读写的权限应该是有缺失导致的,于是各种尝试。

   <uses-permissioandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
   <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

检查了一遍,都已经加过了。所以排除这个地方的读写权限。

然后命令行到终端去看/data/data/com.xxx.bluetooth/databases/bt_contact.db,结果发现数据库文件是存在的,那就奇怪了,为什么会不能操作打开呢。于是试了下给databases文件夹权限。chmod 777 /databases 然后再去运行应用。竟然没再出错。

总结了下,很可能是因为之前的应用已经有人编译并调试过,所以生成过一次应用目录,但是卸载的时候只是覆盖安装了,因此数据库文件夹的读写权限还是上个应用的,所以此时应该是重新再获取一次文件夹读写权限就可以了。或许完全卸载再重装也是可以解决的,大家可以再做尝试了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读