2016-06-26 2 views
1

파일에서 HSQLBD를 사용하고 있습니다.HSQLDB 모드를 읽기 전용으로 변경할 수 있습니까?

내가 database.script 파일에 여러 액세스를받을 필요

합니다 (HSQLDB의 내 사용은 내 other question에 표시됩니다). 기본적으로 은, 데이터베이스 옵션 읽기 전용으로 실행 = 여기 거짓은 공식 문서에서 일부 정보는 다음과 같습니다

읽기 전용 데이터베이스

파일 : 카탈로그는 읽기 전용 영구적으로 할 수있다, 또는 열 수 있습니다 을 읽기 전용으로 사용하십시오. 데이터베이스를 읽기 전용으로 만들려면 속성, 값 쌍인 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); 
관련 문제