无法打开在 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 对象只能在同一线程中使用”

在线程中创建的 SQLite 对象只能在 Django 2.2.2 和 ipdb 的同一线程中使用

如何在android自带的sqlite3中创建一个数据库文件,请大虾门详细指导