SQLITE文件已加密或不是数据库

tsm1rwdh  于 2023-03-03  发布在  SQLite
关注(0)|答案(6)|浏览(202)

我有一个巨大的问题...我正在开发一个桌面应用程序与SQLite,但在复制/粘贴过程中,我失去了权力,该进程被终止,所以数据库丢失。然而,我找到了一种方法来恢复它,但数据库是加密的。当我试图打开一个连接使用conn.Open();我得到的错误:“SQLITE被加密或不是数据库”。如果我尝试用SQLite的DB Browser打开它,它会询问我SQLCipher加密密码,所以在我看来数据丢失了。
是否有默认密码?为什么会发生这种情况?如何防止再次发生?我该怎么做?
先谢了。

vatpfxk5

vatpfxk51#

还要检查您正在“连接”的SQLite版本是否与DB文件版本一致。
例如,下面是一个由SQLite版本3+编写的DB文件:

$ file foobar.db 
foobar.db: SQLite 3.x database, last written using SQLite version 3027002

这里我还有两个版本的sqlite:

$ sqlite -version
2.8.17
$ sqlite3 -version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0alt1

显然,事后看来,用sqlite version 2打开foobar.db将失败,并产生相同的错误消息:

$ sqlite foobar.db 
Unable to open database "foobar.db": file is encrypted or is not a database

但只要有正确的版本,一切都很好:

$ sqlite3 foobar.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> 
sqlite> .databases 
main: /tmp/foobar.db
sqlite>

错误消息是一个包罗万象的问题,它仅仅意味着无法识别文件格式。

vvppvyoh

vvppvyoh2#

好吧,终于找到了一个解决方案,所以张贴答案,如果有人会有同样的麻烦,因为我没有。
首先,使用好的恢复软件。对于修复数据库,我发现3没有备份的解决方案:
1.使用数据库浏览器打开损坏的数据库并将数据库导出到SQL。您可以随意命名它。然后,创建新数据库并从SQL导入数据库。
1.有修复损坏的数据库的软件。请下载一个并使用它来修复数据库。
1.从www.example.com下载“sqlite3”sqlite.org,并在命令行中导航到解压“sqlite3”的文件夹,然后尝试使用.dump转储整个数据库,并使用这些命令创建一个新数据库:

sqlite3 corrupt_table_name.sqlite ".dump" | sqlite3 new.sqlite
mv1qrgav

mv1qrgav3#

当我尝试在另一个系统中访问一个数据库转储时,我遇到了同样的错误。当我尝试在一台开发机器上打开时,它在这个线程中抛出了报告的错误:

$ sqlite3 db_dump.sqlite .tables
Error: file is encrypted or is not a database

这是由于这些系统之间的sqlite版本的差异。这个开发系统的版本是3. 6. 20。
生产系统上的版本是3.8.9。我将sqlite3升级到相同版本后,就可以访问其所有数据。我只是在下面显示了预期显示的表格:

# sqlite3 -version
3.8.9
# sqlite3 db_dump.sqlite .tables
capture               diskio                transport     
consumer              filters               processes

不过,这个错误一开始就很容易误导人。

flvlnr44

flvlnr444#

如果您在指定journal_mode = WAL时与数据库进行了交互,然后尝试从不支持WAL(〈v3.7.0)的客户端使用数据库,也会出现此错误。
As noted in the SQLite documentation under Backwards Compatibility,要解决此问题而不必重新创建数据库,请将日志模式显式设置为DELETE

PRAGMA journal_mode=DELETE;
5w9g7ksd

5w9g7ksd5#

您的数据库未加密(这只是错误消息中的两个选项之一)。
您的数据恢复工具没有恢复正确的数据;你在档案里找到的是别的东西。
必须从备份中还原数据库文件。

arknldoa

arknldoa6#

问题是与sqlcipher版本升级在我的情况下,每当我更新我的pod它自动升级sqlcipher和错误发生。
快速修复只需手动添加SDK而不是Pod安装。正确的解决方案请使用此链接GitHub Solution

相关问题