读取嵌入在JAR文件中的Access数据库

时间:2016-02-23 23:09:32

标签: java database ms-access ucanaccess

我有一个Java程序,它使用UCanAccess来读取Access数据库。当我将程序导出到JAR文件时,我无法读取JAR内部的数据库文件。

我尝试使用getClass().getResource("/Database.accdb").getPath(),但它不起作用。

我该如何解决?

1 个答案:

答案 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);