기본적으로 설치 프로그램 인 응용 프로그램을 개발 중입니다. 시작할 때 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 블록의 연결을 닫는 이유는 무엇입니까?고맙습니다. 제 영어를 실례합니다.
감사합니다. 지금 무슨 일이 벌어지고 있는지 이해하지만, unfourtanly 내가 내가 can't 연결할 수 없기 때문에 내가 shutdown 명령을 보낼 수 없다는 것을 이미 설치된 데이터베이스의 정확한 신임장을 알고 있다고 생각할 수 없다. 이 문제를 해결하기 위해서? 감사! – Lucia
문제가되지 않아 데이터베이스를 삭제할 필요가 없으므로 특정 사례에 대한 해결책을 찾을 수 있습니다. :) – Lucia