【问题标题】:Cannot close derby connection with EntityManagerFactory无法关闭与 EntityManagerFactory 的 derby 连接
【发布时间】:2020-09-11 11:21:51
【问题描述】:

创建后,我需要将数据库压缩到一个 zip 文件中(并删除数据库的原始版本)。使用 EntityManagerFactory 创建它后,我将其关闭,以便释放连接并且我可以操作数据库文件。

问题是即使我关闭 EntityManagerFactory 数据库目录仍然被阻止,因为它说它正在使用(它不应该?)。

我创建了一个重新创建问题的 mre...

import java.util.HashMap;
import java.util.Map;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {

    private static EntityManagerFactory entityManagerFactory;

    public static void main(String[] args) {
        String dbURL = "jdbc:derby:C:\\Users\\XXX\\Desktop\\MyDB;create=true";

        Map<String, String> persistenceMap = new HashMap<String, String>();
        persistenceMap.put("javax.persistence.jdbc.url", dbURL);
    
        entityManagerFactory = Persistence.createEntityManagerFactory("PUBLIC", persistenceMap);        
        entityManagerFactory.close();
        entityManagerFactory = null;
    
        System.out.println("DONE");

        //I should be able to delete the database directory now (I'm not).
    
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

【问题讨论】:

    标签: java persistence derby jdb


    【解决方案1】:

    问题解决了,我不得不关闭数据库。

    try {
            DriverManager.getConnection(
                    "jdbc:derby:" + TEMP + "/" + projectName + ";user=xxxx;password=xxxx;shutdown=true");
        } catch (SQLException sqle) {
            //If catches exception went well
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 2011-10-20
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多