有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在内存中创建mdb副本时发生java错误

我使用下面的代码在内存中创建mdb文件的副本,但它在DatabaseBuilder构造函数上给出了空指针异常,即不存在任何文件,我想要的是创建该文件的副本,并对其进行操作,然后将副本返回outputstream

File tmp = new File("test.mdb");

FileChannel channel = MemFileChannel.newChannel(tmp,DatabaseImpl.RW_CHANNEL_MODE);

FileUtils.copyFile(file , tmp);

Database db = new DatabaseBuilder(tmp).setChannel(channel).open();


共 (1) 个答案

  1. # 1 楼答案

    因此,您在项目中有一个预先制作的Access数据库文件作为资源。您可以先使用Class#getResourceAsStream打开资源,然后使用Jackcess打开该数据库的内存副本

    final String dbResourcePath = "/embedded.accdb";
    @SuppressWarnings("rawtypes")
    Class thisClass = JackcessTestMain.class;  // my "main" class
    InputStream dbResourceStream = null;
    // for running from executable jar 
    dbResourceStream = thisClass.getResourceAsStream("/resources" + dbResourcePath);
    if (dbResourceStream == null) {
        // for running inside the Eclipse IDE
        dbResourceStream = thisClass.getResourceAsStream(dbResourcePath);
    }
    

    。。。将InputStream传递给Jackcess MemFileChannel

    MemFileChannel mfc = MemFileChannel.newChannel(dbResourceStream);
    

    。。。然后使用DatabaseBuilder从通道打开Database

    Database db = new DatabaseBuilder().setChannel(mfc).open()
    

    完成对数据库内存副本的更改后,可以将通道的内容发送到OutputStream。比如

    db.close();
    FileOutputStream fos = new FileOutputStream("C:/Users/Public/zzz.accdb");
    mfc.transferTo(fos);
    fos.close();