首页 » MySQL » JDBC中mysql的Connection/Statement/ResultSet的close方法

JDBC中mysql的Connection/Statement/ResultSet的close方法

2017-05-19 18:24:53阅读(917)

现代数据库都是采用 Client/Server 模式进行设计的,数据库服务器作为服务端,各种连接数据库的都称为客户端,比如 JDBCmysql-Front、MS SQL Sever 的查询分析器、Oracle 的 SQL PLUS 等等。

JDBC 的 Connection 客户端与数据库服务器之间是采用 TCP 协议进行通信的。握手完成,通道建立后,用完了就要关掉,如果用完了不关的话,并且是每连一次创建一个的话,会造成数据库服务器建立了大量的客户端连接,如果建的连接很多很多的话,会直接导致数据库性能下降。

一般来说数据库服务器都有客户端最大的连接数量限制,数据库服务器也不会傻到无穷无尽地与客户端建立连接。

因此为了减轻数据库服务端的压力,应该及时关闭 TCP 连接通道。

Connection 与数据库服务器之间建立 TCP 通道之后,还得向数据库服务器发送认证请求,数据库必须验证这个认证请求,认证通过后再告诉 Connection 说你的认证通过了,可以向我发出请求了。

可见一个 Connection 的建立需要经过一个很漫长的过程,特别是数据库服务器不在同一台机器的时候,会更加漫长,如果我们把好不容易费了半天周折建立起来的 Connection 就执行一个简单的 SELECT 就关掉的话,想想看都觉得可惜,你说是不?

一般 Connection 采用资源池模式(资源池模式是 J2EE 设计模式中重要的设计模式)进行数据库连接管理,我们与数据库打了 N 多交道建立起来的 Connection,在我们执行完一个数据库操作之后,并不是马上把这个通道给关闭掉,而是还回池中去,以便于这个 Connection 能为下一次数据库操作进行服务。

采用资源池管理的 Connection 的话,达到了很好的性能,除了第一次花费时间去打开 Connection 通道之后后面并不需要再去打开通道了,因为这个通道并没有关闭。

如果资源池中的 Connection 数量设置为最大 20 个的话,那么无论有多少数据库操作,就是仅仅使用这 20 个连接池。

最后说一下资源池中 Connection 的东西,一般而言数据库服务器如果长时间与客户端连接着的话,数据库服务器会主动断开这个客户端连接(JDBC 也是数据库服务器的客户端),如果是这样的话,很有可能在资源池中的 Connection 会被动断开连接,如果正好某一个断开,而被取出来用的话,就会报错。嘿嘿,实际上我们在使用开源的数据库连接池中并不会发生这种问题,因为连接池管理对象中会定期刷新连接池中连接的健康状态,如果连接超时的话,就将之抛弃,绝对不会让使用者得到这个被数据库回收的连接。

Connection 在执行 close() 方法时,会回收一切与之关联的对象,包括 StatementResultSet

close() 中会通知数据库,我要关闭与你的连接了,如果得到数据库的确认后,会关闭与数据库之间的 TCP 通道,清空数据、再由 JVM 回收、操作系统回收分配出去的端口号。在数据库服务器端,会断开与这个客户端的连接,回收与之建立的连接。

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹