【问题标题】:Exception while trying to open sqlite DB with having pagesize as 64KB尝试打开页面大小为 64KB 的 sqlite DB 时出现异常
【发布时间】:2013-03-29 18:57:37
【问题描述】:

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

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

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

谁能告诉我这可能是什么解决方案?此数据库未加密,且 journal_mode 仅作为删除。

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

谢谢

【问题讨论】:

  • 你能用其他 SQLite 工具打开那个文件吗?
  • 是的,我可以用 sqlitespy 工具打开这个数据库。
  • SQLiteSpy 和 JDBC 驱动程序中 SELECT sqlite_version();PRAGMA compile_options; 的结果是什么?
  • 从程序,版本 = 3.6.20 但是当我尝试运行 PRAGMA compile_options;它给了我一个例外,说没有结果集。从 SQLiteSpy,版本 = 3.7.8 和 compile_options 是选项 ENABLE_COLUMN_METADATA、ENABLE_FTS1 等的列表。

标签: java sqlite jdbc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2021-01-31
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多