我有一个与SQLite DB交互的java程序,其中journal_mode为delete。
这个程序适用于所有数据库,只要数据库的页面大小为32 KB,我就可以进行事务处理。
但是有一个sqlite DB的页面大小为64 KB。当我尝试执行时 stmt.executeQuery(); 在那个DB上,它给了我例外 java.sql.SQLException:[SQLITE_NOTADB]打开的文件不是数据库文件(文件已加密或不是数据库)
任何人都可以让我知道这可能是什么解决方案?此DB未加密,并且只将journal_mode设置为删除。
我可以使用SQLITESpy工具打开这个数据库。
由于
答案 0 :(得分:1)
如果数据库被另一个应用程序打开并且wal和shm文件打开,我会得到同样的奇怪错误。由于我不想打扰这种奇怪的设计内部细节,我使用以下解决方法:
echo ".dump" | sqlite3 database.db | sqlite3 dbcopy.db
并处理查询副本。我甚至可以通过这种方式保护数据库损坏问题,这似乎也困扰着“新”sqlite设计。我希望sqlite设计人员能够确保外部接口更稳定,更干净,并且不会出现故障和损坏等内部设计问题。
答案 1 :(得分:0)
使用64 KB页面需要SQLite 3.7.1或更高版本。