UserException:尝试打开另一个进程当前正在使用的 odb 数据库文件
UserException: Attempt to open odb database file that is currently in use by another process
我有一个 运行 在 Netbeans IDE 中正确运行的应用程序,但在构建它之后,它不只是 运行 有时,应用程序停止响应特定的事件观点。我在命令行中 运行 处理 jar 文件时重现了这个问题,我得到了这个异常,我把它附加到这里
这是我在与对象数据库交互时使用的数据 class
public class DataClass {
private EntityManager em = null;
private EntityManagerFactory emf = null;
private long accNo;
public DataClass() {
connectDatabase();
}
public DataClass(long accNo) {
this.accNo=accNo;
connectDatabase();
}
private void connectDatabase() {
if (emf == null) {
emf = Persistence.createEntityManagerFactory("Atm.odb");
}
if (em == null) {
em = emf.createEntityManager();
}
}
public Customer getAccount(long id) {
connectDatabase();
try {
TypedQuery q = em.createQuery("SELECT cu FROM Customer cu where cu.id= :id", Customer.class);
q.setParameter("id", id);
Customer c=(Customer)q.getSingleResult();
closeConnections();
return c;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void closeConnections(){
emf.close();
em.close();
}
}
这个我在搜索后仍然不知道如何解决 google。但是,此异常仅在 运行 第二次启用该应用程序后发生。如果我在重新启动系统后第一次 运行nig 应用程序。一切正常,但在关闭应用程序并重新 运行 后出现此问题。虽然该应用程序是基于 javafx 构建的
第一种情况你没有关闭你的应用。使用任务管理器并将其杀死。
如果某些线程(通常是 GUI)仍然 运行,则可能会发生这种情况。
实际上,您应该预料到这种行为,并确保在 Java 应用程序中它已正确关闭 - 所有线程都已关闭。
正如上面 Alex 所观察到的,您的第一个 运行 可能还没有完成。
还要检查您是否关闭了 EntityManagerFactory 以释放数据库文件。
如果您必须同时从多个进程访问数据库,请使用客户端-服务器模式而不是嵌入式模式。
我有一个 运行 在 Netbeans IDE 中正确运行的应用程序,但在构建它之后,它不只是 运行 有时,应用程序停止响应特定的事件观点。我在命令行中 运行 处理 jar 文件时重现了这个问题,我得到了这个异常,我把它附加到这里
这是我在与对象数据库交互时使用的数据 class
public class DataClass {
private EntityManager em = null;
private EntityManagerFactory emf = null;
private long accNo;
public DataClass() {
connectDatabase();
}
public DataClass(long accNo) {
this.accNo=accNo;
connectDatabase();
}
private void connectDatabase() {
if (emf == null) {
emf = Persistence.createEntityManagerFactory("Atm.odb");
}
if (em == null) {
em = emf.createEntityManager();
}
}
public Customer getAccount(long id) {
connectDatabase();
try {
TypedQuery q = em.createQuery("SELECT cu FROM Customer cu where cu.id= :id", Customer.class);
q.setParameter("id", id);
Customer c=(Customer)q.getSingleResult();
closeConnections();
return c;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void closeConnections(){
emf.close();
em.close();
}
}
这个我在搜索后仍然不知道如何解决 google。但是,此异常仅在 运行 第二次启用该应用程序后发生。如果我在重新启动系统后第一次 运行nig 应用程序。一切正常,但在关闭应用程序并重新 运行 后出现此问题。虽然该应用程序是基于 javafx 构建的
第一种情况你没有关闭你的应用。使用任务管理器并将其杀死。 如果某些线程(通常是 GUI)仍然 运行,则可能会发生这种情况。 实际上,您应该预料到这种行为,并确保在 Java 应用程序中它已正确关闭 - 所有线程都已关闭。
正如上面 Alex 所观察到的,您的第一个 运行 可能还没有完成。
还要检查您是否关闭了 EntityManagerFactory 以释放数据库文件。
如果您必须同时从多个进程访问数据库,请使用客户端-服务器模式而不是嵌入式模式。