使用 show processlist 查看所有数据库连接 ![](https://img2018.cnblogs.com/blog/1463770/201809/1463770-20180917192359090-1871363524.png)
测试调用 conn.close 之后,连接的变化情况 ![](https://img2018.cnblogs.com/blog/1463770/201809/1463770-20180917192405165-1155324985.png)
测试如果不写 conn.close 而是调用 System.gc() 之后,连接的变化情况 ![](https://img2018.cnblogs.com/blog/1463770/201809/1463770-20180917192416817-1177069812.png)
测试如果不写 conn.close 而是让程序执行完或退出,连接的变化情况 ![](https://img2018.cnblogs.com/blog/1463770/201809/1463770-20180917192419467-99617881.png)
思考为什么必须要手动写 conn.close 语句释放资源
如果不手动释放资源,一两条访问还可以,如果是一百万或着更多的时候,gc是不会那么快速的回收资源的,所以会导致电脑卡死的现象
思考为什么要手动释放 resultset 和 statement
如果使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。