测试 jdbc 中连接关闭的时机
测试 jdbc 中连接关闭的时机
测试 jdbc 中连接关闭的时机
- 写一段程序,测试 jdbc 连接的关闭情况
/*** 测试 jdbc 连接的关闭情况*/public static void testOpenCon(){//打开连接// getOpenCon();try {//关闭连接// CON.close();//如果CON不为空,已连接过if(CON!= null){//如果CON是false // isClosed()该方法判断是否关闭连接 返回true false 返回true是已经关闭 返回fasle在连接if(!CON.isClosed()){System.out.println("Connection连接中");}else {System.out.println("Connection已关闭");}}//如果CON为空,为初始话对象 CON= DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);else {System.out.println("未初始化Connection对象");}} catch (SQLException e) {e.printStackTrace();}}
View Code
- 使用 show processlist 查看所有数据库连接
- 在数据库进行用show processlist进行查询,得出9个字段
首先做个类进行接收这九个字段
package com.wbg.test;public class ProcessList {int id;String user;String host;String db;String command;String time;String state;@Overridepublic String toString() {return "ProcessList{" +"id=" + id +", user='" + user + '\'' +", host='" + host + '\'' +", db='" + db + '\'' +", command='" + command + '\'' +", time='" + time + '\'' +", state='" + state + '\'' +", info='" + info + '\'' +", progress='" + progress + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public ProcessList(int id, String user, String host, String db, String command, String time, String state, String info, String progress) {this.id = id;this.user = user;this.host = host;this.db = db;this.command = command;this.time = time;this.state = state;this.info = info;this.progress = progress;}public String getDb() {return db;}public void setDb(String db) {this.db = db;}public String getCommand() {return command;}public void setCommand(String command) {this.command = command;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getState() {return state;}public void setState(String state) {this.state = state;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public String getProgress() {return progress;}public void setProgress(String progress) {this.progress = progress;}String info;String progress;public ProcessList() {} }
View Code
使用jdbc进行查看
/*** 使用 show processlist 查看所有数据库连接*/public static void processList(){List<ProcessList> list=new ArrayList<>();ProcessList processList=null;ResultSet rs=executeQuery("show processlist");try {while (rs.next()){processList=new ProcessList(rs.getInt("id"),rs.getString("user"),rs.getString("host"),rs.getString("db"),rs.getString("command"),rs.getString("time"),rs.getString("state"),rs.getString("info"),rs.getString("progress"));list.add(processList);}} catch (SQLException e) {e.printStackTrace();}for (int i = 0; i <list.size() ; i++) {System.out.println(list.get(i));}}
View Code
- 测试调用 conn.close 之后,连接的变化情况
![](/assets/blank.gif)
![](/assets/blank.gif)
/*** 测试 jdbc 连接的关闭情况*/public static void testOpenCon(){//打开连接 getOpenCon();try {//关闭连接 CON.close();//如果CON不为空,已连接过if(CON!= null){//如果CON是false// isClosed()该方法判断是否关闭连接 返回true false 返回true是已经关闭 返回fasle在连接if(!CON.isClosed()){System.out.println("Connection连接中");}else {System.out.println("Connection已关闭");}}//如果CON为空,为初始话对象 CON= DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);else {System.out.println("未初始化Connection对象");}} catch (SQLException e) {e.printStackTrace();}}
View Code
- 测试如果不写 conn.close 而是调用 System.gc() 之后,连接的变化情况
- System.gc()该方法是只是回收垃圾,比如StringBuffer进行回收,gc方法不是直接进行回收的,他还需要等待时间,没有关闭连接
![](/assets/blank.gif)
![](/assets/blank.gif)
/*** 测试 jdbc 连接的关闭情况*/public static void testOpenCon(){//打开连接 getOpenCon();try {//关闭连接 System.gc();//如果CON不为空,已连接过if(CON!= null){//如果CON是false// isClosed()该方法判断是否关闭连接 返回true false 返回true是已经关闭 返回fasle在连接if(!CON.isClosed()){System.out.println("Connection连接中");}else {System.out.println("Connection已关闭");}}//如果CON为空,为初始话对象 CON= DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);else {System.out.println("未初始化Connection对象");}} catch (SQLException e) {e.printStackTrace();}}
View Code
创建一张表,插入随机的 10w 条数据.
- 使用存储过程的方式插入数据,存储过程的参数是插入数据的条数
- 需要使用到生成随机字符串的功能,使用一个函数来实现
- [扩展,可选] 了解 out 类型的参数
- [扩展,可选] 了解游标的使用
- [扩展,可选] 使用 jdbc 调用 mysql 存储过程,详细了解
DROP database if exists randdatabase; -- 创建数据库 create database randdatabase; -- 打开数据库 use randdatabase; -- 创建表 create table randtable( id int primary key auto_increment, str varchar(62), -- 字符串 sums int -- 字符串长度 );DELIMITER $$ -- n随机个数 CREATE FUNCTION `rand_string` (n INT) RETURNS VARCHAR(255) CHARSET 'utf8' BEGIN -- 首先定义所有字母和数字,包括大小写数字DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';-- 定义接收字符串DECLARE return_str varchar(255) DEFAULT '';-- 用于计数DECLARE i INT DEFAULT 0;WHILE i < n DO-- concat('abc',d) 在abc上加d 得到abcd-- substring(str,5,1)从第5个取1个-- 用return_str接收字符SET return_str = concat(return_str, substring(char_str, FLOOR(1 + RAND()*62), 1));-- 用i进行计数,当i等于n的时候,就会跳出SET i = i+1;END WHILE;-- 返回字符串RETURN return_str; END $$ delimiter ; -- 定好结束符为"$$" delimiter $$ -- 创建存储过程 create procedure randtableadd(n int) begin-- 关闭事务set autocommit=0;-- 用于计次数set @i = 0;-- 用于接收随机生成个数set @s = 0;-- 进行循环n次WHILE @i < n DO-- 生成随机数字1-62之间set @s=floor(1+rand()*62);-- 添加到表中insert into randtable(str,sums) values(rand_string(@s),@s);-- 进行加iset @i=@i+1;-- 退出END WHILE;-- 提交事务commit;select '成功录入'; end $$ delimiter ;call randtableadd(100000);
测试 jdbc 中连接关闭的时机相关推荐
- day18-事务与连接池 3.jdbc中事务操作介绍
那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...
- 在服务子程中首先关闭ie 的HTML5连接向导
如果样本作为服务程序运行,则会从资源中释放文件gserverd0 dll到临时目录下,然后创建一块共享内存用于通信,在服务子程中首先关闭ie 的HTML5连接向导,关闭ie的默认浏览器检测,然后启动一 ...
- monkey测试中防止关闭WIFI的方法
monkey测试中防止关闭WIFI的方法 在monkey测试过程中,经常出现随机下拉顶部的状态栏,导致WIFI被关闭,测试过程中无网络,业务流程无法进行验证,针对这种情况,有如下两种解决方法: 1.时 ...
- PHP中PDO关闭连接的问题
PHP中PDO关闭连接的问题 在之前我们手写 mysql 的连接操作时,一般都会使用 mysql_close() 来进行关闭数据库连接的操作.不过在现代化的开发中,一般使用框架都会让我们忽视了底层的这 ...
- spring连接jdbc_在Spring JDBC中添加C3PO连接池
spring连接jdbc 连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在这篇文章中,我们将学习如何在Spring JDBC中创建C3P0连 ...
- 在Spring JDBC中添加C3PO连接池
连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在本文中,我们将学习如何在Spring JDBC中创建C3P0连接池(某人未使用休眠). Po ...
- JDBC常用连接写法(包括MySQL、Oracle、Sybase、SQLServer、DB2)
本文引用自CKJ-CLARK<JDBC常用连接写法(包括MySQL.Oracle.Sybase.SQLServer.DB2)> http://apps.hi.baidu.com/share ...
- jdbc 批量insert_037 深入JDBC中PreparedStatement对象使用
1. 什么是SQL注入 (1) 什么是SQL注入? 所谓SQL注入,就是通过把含有SQL语句片段的参数插入到需要执行的SQL语句中,最终达到欺骗数据库服务器执行恶意操作的SQL命令. (2) 如何解决 ...
- JDBC SSL连接MySQL
最近碰到个JDBC连接MySQL出现SSL错误的问题. SSL(Secure Socket Layer:安全套接字层),利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提 ...
- 操作数据库方法总结1——JDBC、连接池与JDBCTemplate
本篇文章更好的阅读体验请见笔者的个人博客 引言 最近一直在操作数据库,然后就发现自己竟然只是会用Mybatis,知道JDBCTemplate,对于为什么要用它们以及它们的出现都是为了解决什么情景只能磕 ...
最新文章
- 抽象类可以有构造函数吗
- Google 是如何定制 Material 主题的?
- c标签 if else
- matplotlib错误:from matplotlib import afm, cbook, ft2font, rcParams, get_cachedirImportError: DLL load
- 快头条月增迅猛超微视 三四线城市“流量炼金”的上限在哪?
- mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?
- 【转载】【程序员练级】提高英语阅读水平经验分享上篇
- ubutun 更换网络源_Ubuntu 14.04用户修改更新源和替换软件源的方法
- MySQL中向下查询_mysql
- 程序包androidx.support.annotation不存在/import android.support.annotation.NonNull;报错
- 微信小程序获取手机号
- 关于后盾网yii框架的学习小结(1)--yii模块的安装
- Asp.net mvc5开源项目超级冷笑话
- 独家分享《非诚勿扰2》普清下载 葛优 舒淇 姚晨 孙红雷 邵兵 安以轩 廖凡
- STM32F030C8T6单片机与GY-61 ADXL335模块——角度传感器
- 如此惊艳的财务报表,领导想不重用你都难!
- UEditor 不调用后台
- 使用教程--通过Excel模板导入数据到表单
- 使input文本框不可编辑的3种方法
- 转贴两篇文章 《绩效主义毁了索尼》和《绩效考评的另一面》
热门文章
- 使用Python进行多项式Lo​​gistic回归
- leaflet地图区域数据可视化
- python连接SQLServer数据库,执行给定的查询SQL语句,并返回查询结果数据
- python交互式shell之jupyter notebook初步安装使用
- HTTP和HTTPS的区别以及计算机网络常见面试题总结
- opencv 2 归一化函数normalize详解
- 2021-08-06 MD5mysql 加密校验
- chrome 插件开发各种功能demo_Chrome扩展开发-编写一个浏览器插件
- 怎么解绑 微信公众号 小程序 开发平台 开发者
- c语言中ox1小于小于a,丹江口市2018适应性数学试卷和答案