2

我有一个与 SQLite DB 交互的 java 程序,其中 journal_mode 为删除。

该程序适用于所有数据库,只要数据库的页面大小为 32 KB,我就可以进行事务。

但是有一个 sqlite DB 的页面大小为 64 KB。当我尝试执行 stmt.executeQuery(); 在那个数据库上,它给了我异常
java.sql.SQLException: [SQLITE_NOTADB] 打开的不是数据库文件的文件(文件已加密或不是数据库)

有人可以让我知道这可能是什么解决方案吗?此数据库未加密,并且 journal_mode 仅作为删除。

不过,我可以使用 SQLITESpy 工具打开这个数据库。

谢谢

4

2 回答 2

1

如果数据库被另一个应用程序打开并且打开了 wal 和 shm 文件,我会得到同样的奇怪错误。由于我不想打扰这种奇怪的设计内部细节,我正在使用以下解决方法:

echo ".dump" | sqlite3 database.db |  sqlite3 dbcopy.db

并处理副本以进行查询。我什至以这种方式免受数据库损坏问题的影响,这似乎也困扰着“新”的 sqlite 设计。我希望 sqlite 设计人员能够确保外部接口更加稳定和干净,并且不会显示诸如失败和损坏之类的内部设计问题。

于 2014-02-10T16:35:55.243 回答
0

使用 64 KB 页面需要SQLite 3.7.1或更高版本。

于 2013-03-31T10:26:56.677 回答