众所周知,H2是一个功能强大的纯Java DBMS,具有服务器/客户端模式和嵌入式的多种功能
当使用H2数据库处理一个小软件时,我遇到了一个问题:
软件崩溃并且连接保持打开状态,重新启动软件时我无法再次访问数据库(它处于嵌入模式,因此被锁定)并绕过此问题我不得不使用任务管理器手动关闭Java虚拟机
有没有办法防止这样的事件发生(应用程序崩溃),但我可以正常恢复连接?
答案 0 :(得分:1)
当JVM正常存在时,H2通常会关闭数据库本身,如果你没有明确地完成它。
在最坏的情况下,您可以使用Thread#setDefaultUncaughtExceptionHandler
安全地终止JVM和/或关闭数据库
答案 1 :(得分:1)
@Ossama Nasser:是的,你可以捕获一切。你最好这样做,或事先知道你决定终止你的程序的例外,以及你的程序资源会有什么影响。
Unix-C程序使用setjmp()& longjmp的()。它很原始,但对大多数信号都有效。
但是,JVM提供了“在main()中尝试/最终解决所有问题”的方法的替代方法:
Runtime.getRuntime().addShutdownHook(new <whatever you write as a handler class>)
答案 2 :(得分:0)
我强烈怀疑你的程序遭受了错误的代码无法在异常时关闭连接。检查所有数据库代码,并确保即使抛出异常也关闭所有连接。
一种常见的方法是关闭try-catch-finally的finally
块上的连接。