我有一个Java程序,它使用UCanAccess来读取Access数据库。当我将程序导出到JAR文件时,我无法读取JAR内部的数据库文件。
我尝试使用getClass().getResource("/Database.accdb").getPath()
,但它不起作用。
我该如何解决?
答案 0 :(得分:2)
您无法直接从运行在可运行的JAR文件中的副本打开数据库文件。 UCanAccess要求数据库文件是“真实”文件,因此您需要从JAR中提取它,然后打开该副本。
例如,要将数据库从JAR提取到临时文件中:
java.io.File dbFile = java.io.File.createTempFile("tempdb", ".accdb");
dbFile.deleteOnExit();
java.nio.file.Files.copy(
YourClassName.class.getResourceAsStream("/stuff.accdb"),
dbFile.toPath(),
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
String connStr = String.format(
"jdbc:ucanaccess://%s;immediatelyReleaseResources=true",
dbFile.getAbsolutePath());
Connection conn = DriverManager.getConnection(connStr);