尝试打开sqlite数据库时,页面大小为64KB时出现异常

时间:2013-03-29 18:57:37

标签: java sqlite jdbc

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

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

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

任何人都可以让我知道这可能是什么解决方案?此DB未加密,并且只将journal_mode设置为删除。

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

并处理查询副本。我甚至可以通过这种方式保护数据库损坏问题,这似乎也困扰着“新”sqlite设计。我希望sqlite设计人员能够确保外部接口更稳定,更干净,并且不会出现故障和损坏等内部设计问题。

答案 1 :(得分:0)

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