我有一个包含以下文件的目录:
contacts.sqlite
forms.sqlite
locations.sqlite
locations.sqlite-shm
locations.sqlite-wal
我在此目录中只有以下NTFS权限:
当我尝试使用Java JDBC查询这些文件时,我会遇到不同的行为:
以下是一些注释:
我尝试了以下内容:
编辑: 我正在使用Xerial SQLite JDBC驱动程序。我尝试以只读方式打开并设置其他paragma如下:
SQLiteConfig config = new SQLiteConfig();
config.setPragma(Pragma.JOURNAL_MODE, "OFF");
//config.setOpenMode(SQLiteOpenMode.READONLY);
config.setReadOnly(true);
DriverManager.getConnection("data_base_url",
config.toProperties());
我的问题:有没有办法在这些文件位于原始目录中时查询这些文件而不更改其权限?
答案 0 :(得分:0)
如documentation中所述,必须使用写访问权限打开WAL模式下的数据库。
您必须更改为回滚日志模式,或使用可写目录。
答案 1 :(得分:0)
我有类似的问题,我在尝试以ReadOnly模式打开SQLite DB时出现了“无法打开数据库文件”,该模式存储在具有“读取,读取执行”权限的文件夹中。 解决方案很简单,原来该文件里面有“文件格式写入版本”(偏移量:0x12)和“文件格式读取版本”(偏移量:0x13)字段。 在两者中我都有值“0x02”,这意味着WAL(见file format)。如果您希望能够访问只读目录中的DB,则需要有0x01(Legacy)。
<强>解决方案强>: 将DB文件复制到某个ReadWrite文件夹,并使用任何十六进制编辑器更新DB文件。并且确保在将来连接到DB时不能使用WAL JournalMode。 如果您有* .sqlite-shm和* .sqlite-wal - 这些文件必须在所有客户端与DB断开连接后消失,因此似乎在活动连接时复制了DB文件。