【问题标题】:Unable to delete database file after closing UCanAccess connection关闭 UCanAccess 连接后无法删除数据库文件
【发布时间】:2017-10-19 12:11:24
【问题描述】:

我使用 UCanAccess 连接到临时 Access 文件以读取数据,之后我想删除这些临时文件。但是,我总是得到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() 失败了?

【问题讨论】:

  • 尝试将;immediatelyReleaseResources=true 附加到连接 URL 的末尾。
  • Itamar,感谢您的修改。 Gord,谢谢你的回答,我会在星期一试试。
  • 是的,它成功了,感谢 Gord Thompson

标签: java jdbc ucanaccess


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多