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

关闭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作业和其他需要“一次性”连接到数据库文件的任务的首选行为。

 类似资料:
  • 刚才发现每次调用完接口都有一堆连接没关掉( 如下图 ): 于是写了一段本地代码无限循环跑发现单独执行一次是可以立刻关闭连接的即便循环跑也一直是 10-30 来回跳我估计就是每次循环好就关闭了问题不大( 代码如下 ): 但是我的 flask 应用中每次请求完连接都在一直没搞懂什么问题( 代码如下 ): 请求指点分析什么问题

  • 我想通过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交易: /////////////////////////