【问题标题】:"Empty database file" exception when trying to open an Access database file with Jackcess尝试使用 Jackcess 打开 Access 数据库文件时出现“空数据库文件”异常
【发布时间】:2015-05-18 15:25:33
【问题描述】:

Jackcess 加密似乎无法打开提供的文件。

这是代码。 我要做的是打开受密码保护的数据库并将指定的表导出为 .csv 文件。

    public class DBTool {
    private final String source = "/Users/myMac/Desktop/database.mdb";
    private final String destination = "/Users/myMac/Desktop/table.csv";
    private File sourceF;
    private File destinationF;
    private Database db;

    public DBTool() {

    }

    public void openEDB(){
        sourceF = new File(source);
        try {
            db = new DatabaseBuilder(sourceF)
                    .setCodecProvider(new CryptCodecProvider("password"))
                    .open();
        } catch (IOException ex) {
            Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void exportDB(){
        sourceF = new File(destination);
        try {
            ExportUtil.exportFile(db, "TableName", destinationF);
        } catch (IOException ex) {
            Logger.getLogger(DBTool.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

以下是错误 我似乎无法弄清楚如何简单地打开要导出的文件。

java.io.IOException: Empty database file
    at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:276)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:378)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:248)
    at accesstoolssim.DBTool.openEDB(DBTool.java:30)
    at accesstoolssim.AccessToolsSim.main(AccessToolsSim.java:9)

Exception in thread "main" java.lang.NullPointerException
    at java.io.FileOutputStream.<init>(FileOutputStream.java:203)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.FileWriter.<init>(FileWriter.java:90)
    at com.healthmarketscience.jackcess.util.ExportUtil.exportFile(ExportUtil.java:204)
    at com.healthmarketscience.jackcess.util.ExportUtil.exportFile(ExportUtil.java:172)
    at accesstoolssim.DBTool.exportDB(DBTool.java:39)
    at accesstoolssim.AccessToolsSim.main(AccessToolsSim.java:10)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

【问题讨论】:

  • 您是否尝试过以“正常”方式打开数据库,即db = DatabaseBuilder.open(sourceF); 以查看其作用?
  • 相同的输出,因为文件是空的,所以它点击 .open 并吐出空数据库文件。我不认为这可能是源本身的问题,我使用数据库并且它在 Access 中运行良好。
  • openEDB() 中尝试检查sourceF.length() 以确保它不为零。另外,我认为您希望 destinationF = new File(destination);ExportDB 中。
  • SourceF.length();返回 0。我绝对想要 destinationF 而不是 source。因此,如果使用变量以及完整路径的文件长度为零,这可能是路径问题吗?还是我用来打开文件的方法存在更深层次的问题?打开文件让我感到难过,在那之后,其他一切似乎都很困难。感谢到目前为止的提示。
  • 是的,几乎可以肯定,source 字符串实际上并不指向输入的 .mdb 文件。仔细检查,如果您碰巧在非 Windows 机器上工作,请记住 *nix 路径和文件名区分大小写(我不记得 Mac 是否也如此)。

标签: java ms-access jackcess


【解决方案1】:
java.io.IOException: Empty database file
    at com.healthmarketscience.jackcess.impl.JetFormat.getFormat(JetFormat.java:276)

告诉您 Jackcess 认为您尝试打开的文件不包含任何字节。即使是没有(用户)表、查询等的 Access 数据库,文件大小仍然不为零,因为必须存在系统对象才能使其成为有效的数据库文件。

因此,您尝试打开的文件实际存在但长度为零,或者您提供的路径无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多