2014-02-27 2 views
0

기본적으로 설치 프로그램 인 응용 프로그램을 개발 중입니다. 시작할 때 HSQL 데이터베이스와 스키마를 만들고 일부 데이터를 삽입합니다. 그 후, 일부 조건이 충족되면 예를 들어, 어떤 이유로 설치가 실패하면 데이터베이스 (파일 포함)를 완전히 삭제하고 싶습니다. 내 특별한 경우에, 사용자가 이미 앱이 설치된 폴더에 애플리케이션을 설치하려고 할 때 오류가 발생해야합니다. HSQLDB는 이미 같은 이름으로 존재하고 자격 증명이 변경되기 때문에 기본 자격 증명으로 db에 연결하려고하면 스키마 생성시 오류가 발생합니다.HSQLDB 파일을 삭제할 수 없음

내가이 오류를 잡은 후에 문제는 내가 데이터베이스가있는 디렉토리를 삭제하려고 할 때 .log 파일이 잠겨있어 오류가 발생한다는 것입니다. 그 자물쇠를 들고 있지만, 왜 그럴 수 없다). 내가 인증 예외를 잡을 후

private static void createDB(String dbName, String dbPath) { 

    Server server = new Server(); 
    server.setDatabaseName(0, dbName); 
    server.setDatabasePath(0, "file:" + dbPath); 
    server.setSilent(true); 
    server.setRestartOnShutdown(false); 
    server.signalCloseAllServerConnections(); 
    server.setNoSystemExit(true); 

    server.start(); 
    server.stop(); 
    server.shutdown(); 
} 

private static void createSchema() throws SQLException, FileNotFoundException, IOException { 

    Connection conn = null; 

    try { 
     conn = DBManager.getConnection(); <---- AUTH ERROR HAPPENS HERE! 
     ScriptRunner runner = new ScriptRunner(conn, true, true); 

     runner.runScript(new BufferedReader(new FileReader("someScript.sql"))); 
     runner.runScript(new BufferedReader(new FileReader("someScript.sql"))); 

    } finally { 
     DBUtils.closeQuietly(conn); 
    } 

} 

, 난 수행하여 HSQLDB 폴더를 삭제하려고 :

File directoryFile = new File(dirPathDB); 
org.apache.commons.io.FileUtils.deleteQuietly(directoryFile); 

하지만 난 여기에

권한 부여 오류 전에 실행됩니다 관련 코드 "somepath/somelogfile.log 파일을 삭제할 수 없습니다"라는 오류 메시지가 나타납니다. 인증 오류와 상관없이 finally 블록의 연결을 닫는 이유는 무엇입니까?

고맙습니다. 제 영어를 실례합니다.

답변

2

현재 데이터베이스가 열려 있기 때문에 데이터베이스를 삭제할 수 없습니다.

기존 설치가 있고 잘못된 자격 증명으로 연결하는 경우 데이터베이스가 먼저 열리고 사용자 이름과 암호를 확인합니다. 검사가 실패하면 정상적으로 올바른 자격 증명을 사용하여 연결하려고 시도하므로 데이터베이스가 닫히지 않습니다.

새로 설치가 완료되지 않은 경우 관리자 권한이있는 계정으로 SQL 문 "SHUTDOWN"을 실행하기 만하면됩니다. 이렇게하면 데이터베이스를 삭제할 수 있습니다.

+0

감사합니다. 지금 무슨 일이 벌어지고 있는지 이해하지만, unfourtanly 내가 내가 can't 연결할 수 없기 때문에 내가 shutdown 명령을 보낼 수 없다는 것을 이미 설치된 데이터베이스의 정확한 신임장을 알고 있다고 생각할 수 없다. 이 문제를 해결하기 위해서? 감사! – Lucia

+0

문제가되지 않아 데이터베이스를 삭제할 필요가 없으므로 특정 사례에 대한 해결책을 찾을 수 있습니다. :) – Lucia

관련 문제