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

关闭UCanAccess连接后无法删除数据库文件

左丘曦
2023-03-14

我使用UCanAccess连接到临时访问文件以读取数据,之后我想删除这些临时文件。但是,我总是得到file.delete()=false

这是我的代码

public class JAccess {
    static Connection conn;
    static Statement stat;

    public static void connect(String DBFilename) {
        try {used ucanaccess to connect temporary access files
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            String DataSource = "jdbc:ucanaccess://" + DBFilename;
            String user = "user";
            String pw = "pw";
            conn = DriverManager.getConnection(DataSource, user, pw);
            stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void disconnect() {
       try {
            stat.close();
            conn.close();
        } catch (Exception e) {
            System.out.println(e);
        }
        stat = null;
        conn = null;
    }
}


public void SelectTable(String DBFilename) throws SQLException {
    JAccess.connect(DBFilename);
    JAccess.disconnect();
}

public static void main(String[] args) throws SQLException {
.........
    SelectTable(DBFilename);
    File f = new File(DBFilename);
    f.delete();

为什么f.delete()失败?

共有1个答案

况景龙
2023-03-14

默认情况下,UCanAccess使用immediatelyReleaseResources=false打开到数据库文件的连接。在这种情况下,当java.sql.connection关闭时,UCanAccess实际上会在一段时间内保持文件句柄和HSQLDB资源打开,以防应用程序希望重新建立到数据库的连接。例如,这可能发生在为每个操作打开和关闭数据库连接的ORM中。但是,这也意味着不能在连接关闭后立即删除临时数据库文件,因为UCanAccess仍然打开该文件。

如果我们在连接URL中指定immediatelyreleaseResources=true,那么UCanAccess将关闭文件句柄,并在java.sql.connection关闭后尽快释放HSQLDB资源。这通常是ETL作业和其他需要“一次性”连接到数据库文件的任务的首选行为。

 类似资料:
  • 我想通过pymongo阅读集合,但我得到以下错误: 回溯(最近的调用为last):文件“C://users/gsingh/pycharmprojects/mc/quizQuestionAnswers.py”,第21行,pprint.pprint(posts.find_one())文件“C:\users\gsingh\appdata\local\continuum\anaconda2\lib\sit

  • 从历史上看,我们会在耗尽更新后完全停止/重启Tomcat。我们将切换到使用Tomcat管理器并重新部署战争文件的新版本,在某些情况下,还将使用CodeHaus Cargo部署带有版本后缀(例如mywar.war##1234)的战争文件。虽然HikariCP在过去工作顺利,但在Maven和Cargo进行部署/重做后,我们现在看到了致命的错误。错误是: [致命]爪哇。sql。SQLException:

  • 问题内容: 我有些困惑,我从阅读以下内容 你不需要关闭conn连接吗?如果conn.close()没有发生,那实际上是怎么回事? 我有一个正在维护的私有Web应用程序,该应用程序当前无法关闭任何一种形式,但是重要的应用程序真的是stmt,conn还是两者兼而有之? 该站点间歇性地关闭,但是服务器一直在说这是数据库连接问题,我怀疑它没有关闭,但是我不知道该关闭哪个。 问题答案: 使用完之后,你需要通

  • 问题内容: 我已经将我的应用程序设置为通过UCanAccess连接到Access数据库,但是无法连接到共享驱动器上的数据库。请参阅下面的示例。 当我将共享驱动器上的文件夹映射到某个字母(例如P :)时,这很有趣。 有可能解决这个问题吗?我的用户对该文件夹具有读/写权限,但是我不想在每台计算机上映射驱动器。谢谢 问题答案: 您只是在连接URL中没有足够的正斜杠来表示UNC路径。如前所述,对于本地连接

  • 问题内容: 我在hibernate状态下使用jpa。我有以下方法: 可以,但是它关闭了与数据库的连接。当秒被执行时 引发什么原因 我的配置: 编辑 我不知道为什么“ firstJDBCTemplateQuery”关闭数据库连接。如何解决这个问题? 堆栈跟踪: 编辑 我检查了堆栈跟踪。 编辑 我用 是 是 编辑调试结果 : 启动Beginin交易: /////////////////////////

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)