JDBC连接关闭conecpt

时间:2017-06-07 06:41:07

标签: java jdbc

我创建了连接对象并存储在hashMap中。在连接对象上执行查询时,我从hashMap中检索对象。在最后一个块中我关闭了连接。 但是,当我们第二次来时,我再次从hashMap中检索连接的对象。这次执行查询时我得到了关闭连接异常。 如果我从最后删除conn.close(),它的工作原理。 这背后的原因是什么?而且,当我打印连接的对象时,我得到了对象。

4 个答案:

答案 0 :(得分:1)

如果要为多个查询重复使用相同的Connection对象,则每次使用它时都不应关闭连接,因为关闭它意味着第二个查询将失败。

因此,您应该为每个查询创建一个新的开放Connection,或者保持缓存的Connection开放(即不要在finally块中关闭它。)

答案 1 :(得分:1)

我认为您必须使用连接池实现而不是简单的连接映射。此处在每次事务后关闭连接时,连接的生命周期结束,您无法从映射中重复使用它。

考虑一个连接池,它可以为您提供已打开的连接,并在您的使用完成后返回/释放连接回池。

答案 2 :(得分:0)

我认为您需要转移到连接池的某些实现。

P.S。查看代码

会很有帮助

答案 3 :(得分:0)

在每个sql语句之后,您不必关闭Connection。 新创建的Connection处于自动提交模式: 默认情况下,新连接处于自动提交模式。来自Connection.setAutoCommit doc:

  

语句完成时发生提交。的时候了   语句完成取决于SQL语句的类型:•对于DML   语句,如插入,更新或删除,以及DDL语句,   声明在完成执行后立即完成。 •对于   选择语句,语句完成时关联   结果集已关闭。 •对于CallableStatement对象或for   返回多个结果的语句,语句完成   当所有关联的结果集都已关闭时,全部   已检索到更新计数和输出参数。

但是如果将auto-commit设置为false,则必须调用Connection.commit方法来更新数据库。