gpt4 book ai didi

java - Jackcess DatabaseBuilder.open 失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:49 24 4
gpt4 key购买 nike

我在我的 Eclipse 插件项目中使用 Jackcess API。我在resources/lib下添加了jackcess-2.1.0.jar文件。我将 jar 包含在我的二进制构建下和 build.properties 中。我使用连接字符串成功建立连接,但我的 DatabaseBuilder.open() 调用未执行。我的代码是

 public void run() {
try {
File tempTarget = File.createTempFile("eap-mirror", "eap");
try {
this.source = DriverManager.getConnection(EaDbStringParser.eaDbStringToJdbc(sourceString));
this.source.setReadOnly(true);

try {
FileUtils.copyFile(new File(templateFileString), tempTarget);
} catch (IOException e) {
e.printStackTrace();
}
// Changes
try {
this.target = DatabaseBuilder.open(tempTarget);
} catch (IOException e) {
e.printStackTrace();
}

Collection<String> tables = selectTables(source);
long time = System.currentTimeMillis();
for (String tableName : tables) {
long tTime = System.currentTimeMillis();
Table table = target.getTable(tableName);
System.out.print("Mirroring table " + tableName + "...");
table.setOverrideAutonumber(true);

copyTable(table, source, target);
System.out.println(" took "+ (System.currentTimeMillis() - tTime));
}
System.out.println("Done. Overall time: "+ (System.currentTimeMillis() - time));
System.out.println("done");
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {

// More Code here

} catch (IOException e1) {

}
}

当我在 Debug模式下运行该类并到达 DatabaseBuilder.open 时,调用失败。

这是我的项目结构:

My project structure

谁能告诉我可能的原因吗?

最佳答案

DatabaseBuilder.open 方法期望打开现有的格式正确的 Access 数据库文件。 java.io.File.createTempFile 方法创建一个 0 字节文件。所以,代码

File dbFile;
try {
dbFile = File.createTempFile("eap-mirror", "eap");
try (Database db = DatabaseBuilder.open(dbFile)) {
System.out.println(db.getFileFormat());
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
} catch (Exception e) {
e.printStackTrace(System.out);
} finally {
System.out.println("Finally...");
}

会导致 Jackcess 抛出

java.io.IOException: Empty database file

当它尝试执行DatabaseBuilder.open(dbFile)时。

相反,您应该DatabaseBuilder.create将0字节文件转换为真正的Access数据库文件,如下所示

File dbFile;
try {
dbFile = File.createTempFile("eap-mirror", ".accdb");
dbFile.deleteOnExit();
try (Database db = DatabaseBuilder.create(Database.FileFormat.V2010, dbFile)) {
System.out.println(db.getFileFormat());
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
} catch (Exception e) {
e.printStackTrace(System.out);
} finally {
System.out.println("Finally...");
}

关于java - Jackcess DatabaseBuilder.open 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com