无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)
Posted
技术标签:
【中文标题】无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)【英文标题】:Unable to open SQLite DB created in Android (file is encrypted or is not a database) 【发布时间】:2011-06-05 12:58:49 【问题描述】:我的一些用户报告说他们无法正确打开使用 sqlite jdbc 或 sqlite 浏览器 (http://sourceforge.net/projects/sqlitebrowser/) 等其他工具在 android 中创建的 sqlite 数据库。
这是一个有问题的示例数据库:
http://pocket-for-android.1047292.n5.nabble.com/Desktop-Version-Screenshots-Work-In-Progress-tp4383220p4456017.html
这个 sqlite db 是在 HTC Sensation 上创建的,运行 Android 2.3.3 和 Sense 3.0。
确切的问题是,如果您在文本编辑器中查看文件,您会看到正在创建的一堆表,但如果您尝试运行“select * from groups;”你会得到一个 SQLException: file is encrypted or is not a database。
我尝试过使用“select sqlite_version;”看看这是否是版本问题 - sqlite 浏览器显示 3.6.18。但是不同的工具给了我不同的版本号......不知道这是怎么回事。
我还应该指出,我的应用程序将数据库直接从设备 (/data/data/com.citc.wallet/databases/wallet.db) 复制到 Dropbox。
任何帮助将不胜感激。
【问题讨论】:
使用 SQLiteSpy 在我的 PC 上打开数据库对我来说很好。抱歉,我知道这对你没有真正的帮助,但我只是想提一下。 是的 - 我刚刚找到一两个工具,它也可以打开数据库。我最好的猜测是它对于 sqlite jdbc 来说太新了(zentus.com/sqlitejdbc) 一个想法可能是较新的数据库使用 WAL 模式。尝试使用正常工作的系统执行“PRAGMA journal_mode=delete”,然后重试访问。 【参考方案1】:解决方案是 zentus 项目无法使用最新版本的 SQLite。
幸运的是,有人在这里维护了一个分叉:http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
我所要做的就是用 xerial 替换罐子,一切都奏效了。在我看来,Xerial sqlite jdbc 是在 Java 中连接 SQLite 的最佳方式(我尝试了几个库)。
【讨论】:
【参考方案2】:我也遇到了同样的问题。 但是一旦我更改了它解决的数据库名称。 因此,只需通过创建新数据库来尝试一下
【讨论】:
以上是关于无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)的主要内容,如果未能解决你的问题,请参考以下文章
使用在 Windows 中创建但要在 Android 中访问的 sqlite db
ProgrammingError: 在一个线程中创建的 SQLite 对象只能在同一个线程中使用
将表插入到我使用 sqlite 在 python 中创建的数据库中时出错
使用 Flask 中的 SQLAlchemy 会话会引发“在线程中创建的 SQLite 对象只能在同一线程中使用”