当我连接到我的只读数据库(现在在jar中)时,我可以运行该应用程序,但是当我尝试运行查询时,它会冻结应用程序。我不确定我做错了什么,我跟着this guide
这就是我连接数据库的方式
try
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
connection = DriverManager.getConnection("jdbc:derby:jar:(database.jar)MyDbTest;");
statement = connection.createStatement();
}
catch (Exception e)
{
e.printStackTrace();
}
答案 0 :(得分:2)
所以这是我的简单设置,我设置了必要的临时目录属性。
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()
或与之相关的任何事情; - )
如果这不能解决您的问题,请检查/重新创建您的数据库。如果它没有关闭 在你装好你的罐子之前,德比总会在开机时尝试恢复。