ast*_*eri 1 java database-connection prepared-statement
假设我PreparedStatement
从一个Connection
对象得到一个,然后我用另一个覆盖该引用PreparedStatement
.然后,我以后close()
参考.第一个PreparedStatement
(我丢失参考的那个)会保持开放吗?或者一些协议或垃圾收集是否会解决这个问题?
例如:
PreparedStatement ps = connection.prepareStatement(MY_QUERY);
// do stuff
ps.execute();
ps = connection.prepareStatement(MY_OTHER_QUERY);
// do stuff
ps.execute();
ps.close();
Run Code Online (Sandbox Code Playgroud)
第一个PreparedStatement
对象(用于执行的对象)是否MY_QUERY
保持打开状态?
是的,PreparedStatement
将被打开,直到它被收集垃圾*(如果有的话).
这就是为什么你总是看到规则总是释放(关闭)你获得的外部资源.
JDBC资源(例如此预准备语句,连接,结果集)和IO资源(套接字,流,...)是您手动需要在Java中管理的两种最常见的资源.
*严格来说,它可以在finalize
方法中关闭,可能在它获得GC 之前稍微有点,但在它有资格获得GC后,但是对于这个讨论,这已经足够接近了.