是否可以在运行时将HSQLDB模式更改为只读?

时间:2016-06-26 17:05:13

标签: java hsqldb

我在 file:mode中使用HSQLBD。

(我对HSQLDB的使用显示在我的other question

我需要多次访问 database.script 文件。 默认情况下,数据库运行时带有选项 readonly = false 以下是官方文档中的一些信息:

  

只读数据库

     

文件:目录可以永久性地制作,也可以打开   只读。要使数据库只读,属性,值对,   readonly = true可以添加到数据库的.properties文件中。   必须使用SHUTDOWN命令在制作之前关闭数据库   这种变化。

     

也可以以只读方式打开普通数据库。为了这,   该属性可以包含在第一个连接的URL中   数据库中。

     

使用只读数据库,仍然可以插入和删除   TEMP表中的行。

但我仍然没有真正理解,是否有可能在没有服务器关闭和没有重启的情况下即时更改此选项?如果有可能 - 你能举一些小代码吗?

如果没有,是否有某种方法可以解锁.script文件并在不关闭服务器的情况下获取不同线程的访问权限?

1 个答案:

答案 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);