Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取嵌入在JAR文件中的Access数据库_Java_Database_Ms Access_Ucanaccess - Fatal编程技术网

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

Java 读取嵌入在JAR文件中的Access数据库,java,database,ms-access,ucanaccess,Java,Database,Ms Access,Ucanaccess,我有一个Java程序,它使用UCanAccess读取Access数据库。当我将程序导出到JAR文件时,我无法读取JAR中的数据库文件 我试过使用getClass().getResource(“/Database.accdb”).getPath(),但不起作用 如何修复它?您不能直接从嵌入可运行JAR文件中的副本打开数据库文件。UCanAccess要求数据库文件是一个“真实”文件,因此需要从JAR中提取它,然后打开该副本 例如,要将数据库从JAR提取到临时文件中,请执行以下操作: java.io.

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

我试过使用
getClass().getResource(“/Database.accdb”).getPath()
,但不起作用


如何修复它?

您不能直接从嵌入可运行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_(现有);
String connStr=String.format(
“jdbc:ucanaccess://%s;立即删除资源=true”,
dbFile.getAbsolutePath());
连接conn=DriverManager.getConnection(connStr);

不能直接从嵌入可运行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_(现有);
String connStr=String.format(
“jdbc:ucanaccess://%s;立即删除资源=true”,
dbFile.getAbsolutePath());
连接conn=DriverManager.getConnection(connStr);

我不确定您是否可以直接从jar中提取数据库并将其存储在磁盘上的某个位置,这样嵌入数据库意味着数据库将是只读的(假设您可以从jar中读取),我不确定您是否可以直接,您可能需要从jar中提取数据库并将其存储在磁盘上的某个位置,这样嵌入它意味着数据库将是只读的(假设您可以从jar中读取)