2016-06-26 46 views
1

我正在使用HSQLBD 文件:模式。是否可以將HSQLDB模式更改爲只讀模式?

(我的HSQLDB的使用是在我other question所示),我需要接受多種方式訪問​​的database.script文件。 默認情況下,數據庫與選項只讀運行=假這是從官方文檔的一些信息:

只讀數據庫

的文件:目錄可以只讀固定編制,也可以打開 只讀。要使數據庫只讀,可以將屬性值對 readonly = true添加到數據庫的.properties文件中。 在使 發生此更改之前,必須使用SHUTDOWN命令關閉數據庫。

也可以只讀方式打開普通數據庫。爲此, 該屬性可以包含在第一次連接到 數據庫的URL中。

對於只讀數據庫,仍然可以在TEMP表中插入和刪除 行。

但我仍然沒有真正明白,是否有可能在運行中更改此選項,而無需關閉服務器並且無需重新啓動?如果可能的話 - 你能舉一些小代碼的例子嗎?

如果沒有,是否有某種方法可以解鎖.script文件並在不關閉服務器的情況下獲取不同線程的訪問權限?

回答

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); 
相關問題