文章目录

这几天在解决客户的一个问题,说用了发给我的sqlite的数据库文件会发生数据上传失败问题,于是结合发过来的数据库文件准备看一下。

先是通过adb push命令把文件copy到手机,然后cp到应用的缓存目录(需要root权限),覆盖原来的数据库文件。结果应用一运行就报了如下的错误:

1
2
3
4
5
6
E/SQLiteLog: (14) cannot open file at line 30191 of [00bb9c9ce4]
E/SQLiteLog: (14) os_unix.c:30191: (13) open(/data/data/com.xxx/databases/xxx) -
E/SQLiteDatabase: Failed to open database '/data/data/xxx/databases/xxxx'.

android.database.sqlite.SQLiteCantOpenDatabaseException:
unknown error (code 14): Could not open database

看提示说是读了多少行后报错,第一反应是数据库文件有问题?在PC端用工具打开那个文件,发现能正常打开,而且执行了SQL都是正常看到数据。奇了怪了,那个line是代码的行数?直接搜索上面的错误,在stackoverflow上面看别人各种回答。有的说是权限问题,要先申请权限,有的说是6.0上面的问题,要动态权限等等。结合自己的情况,发现都不是。接着往下看,发现有人提到了SELinux security,突然想到了是不是权限问题?马上命令一看,果然只有root权限,执行chomd 777 xxxx,然后再一运行app,OK了。

运气太好了,这样就解决问题了,还想说报那个code 14是什么错误呢。后来到sqlite源码里面找了一下,找到这个的一个宏定义#define SQLITE_CANTOPEN 14 /* Unable to open the database file */,这个提示对解决问题并没有什么帮助,很佩服自己当时的反应。网上也有人说这里有一个bug,没有去深究,问题已解决,后面的事情还没有做呢!

文章目录