これが私の簡単なセットアップです。必要な一時ディレクトリ プロパティを設定します。
private static void accessReadOnlyJar() {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
Properties props = new Properties();
String tempDir = System.getProperty("java.io.tmpdir");
props.setProperty("derby.storage.tempDirectory", tempDir);
props.setProperty("derby.stream.error.file", tempDir+"derby_error.log");
Connection connection = DriverManager.getConnection("jdbc:derby:jar:(data/db.jar)derbyDB", props);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("SELECT * FROM TESTTABLE");
while(result.next()){
System.out.println(result.getString("NAME"));
}
connection.close();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
tempDir の適切な場所は次のとおりです。
- システムの一時ディレクトリ:
System.getProperty("java.io.tmpdir")
- あなたの作業ディレクトリ:
"."
- アプリのディレクトリ:
ClassLoader.getSystemClassLoader().getResource(".").getPath()
またはそれに関連するもの;-)
これで問題が解決しない場合は、データベースを確認/再作成してください。jar をパッキングする前に十分にシャットダウンしなかった場合、derby は起動時に常にリカバリーを試みます。