Java 连接池
Posted
技术标签:
【中文标题】Java 连接池【英文标题】:Java Connection Pooling 【发布时间】:2013-04-08 09:07:18 【问题描述】:我搜索了连接池并阅读了它。如果我理解正确的话,连接池就像打开连接的集合。如果建立或创建了连接,则应将其添加到连接池中,如果该连接已关闭,则应将其从连接池中删除;当它打开时,我可以一次又一次地使用它。
在阅读这些关于连接池的教程和解释时,我有一些问题:
连接池是否只能在特定计算机上使用?喜欢电脑A 无法与 ComputerB 共享其连接池?
connection.close()
应该放在哪里?
仅在选择/加载记录时使用连接是否正确?在我得到返回的记录/数据后,我在finally
语句处关闭了连接。与添加、编辑和删除记录相同。在处理过程中,我放置了一个进度条,因此用户必须等待它完成并再次执行某些过程,这意味着我一次只会打开一个连接。
感谢您的解释。 :)
【问题讨论】:
【参考方案1】:注意:我假设我们谈论的是java.sql.Connection
接口。
连接池是否只能在特定计算机上使用?像 ComputerA 不能与 ComputerB 共享它的连接池?
正在运行的应用程序和数据库之间存在连接。自然,两台不同的机器不能共享同一个正在运行的应用程序,因此它们不能与数据库共享连接。
connection.close()
应该放在哪里?
您应该始终确保在使用 Connection
实例后调用 close()
(通常在 finally
块中)。如果正在使用池,这实际上会将连接返回到后台池。参考:Closing JDBC Connections in Pool
仅在选择/加载记录时使用连接是否正确?获得返回的记录/数据后,我在
finally
语句处关闭连接。
是的,没错。您不想手动挂起 Connection
引用 - 使用它来执行 SQL/DML,然后通过在 finally
块中调用 close()
将其检回到池中,就像您正在做的那样。
【讨论】:
全部正确,如果您使用的是 Java 7,则可以使用新的 AutoCloseable interface 而不是将 close() 放在 finally 块中。查看this example from the Oracle docs以上是关于Java 连接池的主要内容,如果未能解决你的问题,请参考以下文章