当前位置: 首页 > 知识库问答 >
问题:

UCanAccess“无法访问该文件,因为它正被另一个进程使用”

郑鸿朗
2023-03-14

下面是使用Ucanaccess Jdbc驱动程序从Microsoft Access文件filename.accdb获取连接的代码。但在运行此代码时,它会抛出异常,就像已经使用的文件一样。

但是我想在其他应用程序使用MSAccess数据库文件时并发地使用它。

      //Code for connecting with MS Access Database
            public void getConnection(){
               Connection connection = null;
               Statement statement = null;
               ResultSet resultSet = null;
                    try {
                        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                    } catch (ClassNotFoundException cnfex) {
                        logger.error("Problem in loading or "
                                + "registering MS Access JDBC driver " + cnfex);
                    }

                    String dbURL = "jdbc:ucanaccess://" + msAccDB;
                    logger.info("DB File Url = " + msAccDB);
                    try {
                        DriverManager.registerDriver(new UcanaccessDriver());
                        connection = DriverManager.getConnection(dbURL);
                    } catch (SQLException ex) {
                        logger.error(ex);
                    }
                    return connection;
            }

当我运行上面的代码时,出现了如下异常:

net.ucanaccess.jdbc.ucanaccesssqlexception:UCAEXC:::4.x.x e:\filename.accdb(进程无法访问该文件,因为它正被另一个进程使用)在net.ucanaccess.jdbc.ucanaccessDriver.connect(UcanAccessDriver.java:231)在java.sql.driverManager.getConnection(DriverManager.java:664)在java.sql.driverManager.getConnection(DriverManager.java:270)................................................................................................................................在sun.reflect.nativeMethodAccessorImpl.invoke0(原生方法)在sun.reflect.nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.java:62)在sun.reflect.delegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:498)在在sun.reflect.nativeMethodAccessorImpl.invoke(nativeMethodAccessorImpl.java:62)在sun.reflect.delegatingMethodAccessorImpl.invoke(delegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:498)在sun.launcher.launcherHelper$fxhelper.main(launcherHelper.java:767)在pen0(本机方法)在java.io.randomaccessfile.open(randomaccessfile.java:316)在java.io.randomaccessfile.open(randomaccessfile.java:243)在com.healthmarketscience.jackcess.impl.databaseimpl.openchannel(databaseimpl.java:489)在com.healthmarketscience.jackcess.impl.databaseimpl.open(databaseimpl.java:381)在dbreference.java:169)在net.ucanaccess.jdbc.dbreferencesingleton.loadReference(dbreferencesingleton.java:51)在net.ucanaccess.jdbc.ucanaccessDriver.connect(ucanaccessDriver.java:90)...还有17个

共有1个答案

张亦
2023-03-14

对于这种类型的场景,最好迁移到SQL server,它处理多用户访问比access更好(更安全、更快),同时通常保留兼容的数据结构

 类似资料:
  • 我的脚本搜索特定目录中的所有pdf文件,然后从pdf中提取一个id,并在文件中组织pdf。例如我有: 我想这样组织它们: 下面的脚本做的工作,但我认为只有最后一个文件输出以下错误: 回溯(最近一次调用):文件“C:\Users\user\Downloads\aa\project.py”,第74行,在操作系统中。rename(source,dest)PermissionError:[WinError

  • 我是C#新手,连接Firebird数据库时遇到问题。我想让我的程序访问Firebird数据库[FDB格式文件]。我有问题,请参见下面的代码: 这段代码允许我读取FDB文件并提取数据。当代码第一次执行时,没有错误或问题,但是当我再次执行时,这个错误会显示出来: 进程无法访问文件“C:\Users\ACC-0001”。FDB’因为它正被另一个进程使用。

  • 问题内容: 我的代码用于一个脚本,该脚本查看一个文件夹并删除分辨率为1920x1080的图像。我的问题是我的代码运行时; 我收到此错误消息: 只需确认一下,Python是我计算机上运行的唯一程序。是什么导致此问题,我该如何解决? 问题答案: 您的过程就是打开文件的过程(仍然存在)。您需要先关闭它,然后再删除它。 我不知道PIL是否支持上下文,但是是否支持: 进入之前,请确保删除(并关闭文件)。 如

  • 我正在尝试测试我自己的antiweb版本,可以在这里找到。但是,我正在使用Pythons单元测试模块对其进行测试。代码如下: 除了功能外,所有功能都正常工作。在执行unittest时,如果不拆下,temp文件夹及其内容将被完美创建。但是使用功能,我得到一个错误: 当我再看临时文件夹时,文件夹本身仍然在那里,但现在是空的。这将是太多,包括我的反网络文件在这里,所以我有它在这里再次链接,如果你需要它。

  • 我的代码用于查看文件夹并删除分辨率为1920x1080的图像的脚本。我遇到的问题是,当我的代码运行时; 我收到以下错误消息: 我想确认一下,Python是我电脑上唯一运行的程序。导致此问题的原因是什么?如何解决?

  • 我是编程新手,我有一个问题。如果我有两个函数,一个创建一个文本文件并写入其中,而另一个打开同一个文本文件并从中读取。 我得到的错误是: 系统伊奥。IOException:'进程无法访问文件'@。txt“因为它正被另一个进程使用。” 我曾尝试为每个功能设置单独的计时器,但仍然不起作用。我认为最好的办法是函数二直到函数一结束才开始。 你能帮我实现这个吗?非常感谢!迈克 源代码: