我在 file:mode中使用HSQLBD。
(我对HSQLDB的使用显示在我的other question)
中我需要多次访问 database.script 文件。 默认情况下,数据库运行时带有选项 readonly = false 以下是官方文档中的一些信息:
只读数据库
文件:目录可以永久性地制作,也可以打开 只读。要使数据库只读,属性,值对, readonly = true可以添加到数据库的.properties文件中。 必须使用SHUTDOWN命令在制作之前关闭数据库 这种变化。
也可以以只读方式打开普通数据库。为了这, 该属性可以包含在第一个连接的URL中 数据库中。
使用只读数据库,仍然可以插入和删除 TEMP表中的行。
但我仍然没有真正理解,是否有可能在没有服务器关闭和没有重启的情况下即时更改此选项?如果有可能 - 你能举一些小代码吗?
如果没有,是否有某种方法可以解锁.script文件并在不关闭服务器的情况下获取不同线程的访问权限?
答案 0 :(得分:0)
访问HSQL内部类所需的要求。示例代码是为v2.3.3编写的,它可能不适用于其他版本。
//import org.hsqldb.*;
//start server
Server.main(new String[]{"-database.0","file:s:/folder/dbname","-dbname.0","dbname","-no_system_exit","true"});
//set DB readonly
Database db = DatabaseManager.lookupDatabaseObject("file:", "s:/folder/dbname");
db.setReadOnly();
//alter connection to readonly
Session[] oa = db.sessionManager.getAllSessions();
for (int i = 0; i < oa.length; i++) {
if (oa[i].getDatabase() == db) {
try {
oa[i].setReadOnly(true);
oa[i].setReadOnlyDefault(true);
} catch (Exception e) {
//the connection is during transaction...
}
}
}
//the implementation of Database cannot turn to writable,
//close it...
db.close(Database.CLOSEMODE_COMPACT);