测试 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 之后,连接的变化情况

    

/*** 测试 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方法不是直接进行回收的,他还需要等待时间,没有关闭连接

    

 /*** 测试 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);

posted @ 2018-09-17 09:39 韦邦杠 阅读(...) 评论(...) 编辑 收藏

测试 jdbc 中连接关闭的时机相关推荐

  1. day18-事务与连接池 3.jdbc中事务操作介绍

    那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...

  2. 在服务子程中首先关闭ie 的HTML5连接向导

    如果样本作为服务程序运行,则会从资源中释放文件gserverd0 dll到临时目录下,然后创建一块共享内存用于通信,在服务子程中首先关闭ie 的HTML5连接向导,关闭ie的默认浏览器检测,然后启动一 ...

  3. monkey测试中防止关闭WIFI的方法

    monkey测试中防止关闭WIFI的方法 在monkey测试过程中,经常出现随机下拉顶部的状态栏,导致WIFI被关闭,测试过程中无网络,业务流程无法进行验证,针对这种情况,有如下两种解决方法: 1.时 ...

  4. PHP中PDO关闭连接的问题

    PHP中PDO关闭连接的问题 在之前我们手写 mysql 的连接操作时,一般都会使用 mysql_close() 来进行关闭数据库连接的操作.不过在现代化的开发中,一般使用框架都会让我们忽视了底层的这 ...

  5. spring连接jdbc_在Spring JDBC中添加C3PO连接池

    spring连接jdbc 连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在这篇文章中,我们将学习如何在Spring JDBC中创建C3P0连 ...

  6. 在Spring JDBC中添加C3PO连接池

    连接池是一种操作,其中系统会预先初始化将来要使用的连接. 这样做是因为在使用时创建连接是一项昂贵的操作. 在本文中,我们将学习如何在Spring JDBC中创建C3P0连接池(某人未使用休眠). Po ...

  7. JDBC常用连接写法(包括MySQL、Oracle、Sybase、SQLServer、DB2)

    本文引用自CKJ-CLARK<JDBC常用连接写法(包括MySQL.Oracle.Sybase.SQLServer.DB2)> http://apps.hi.baidu.com/share ...

  8. jdbc 批量insert_037 深入JDBC中PreparedStatement对象使用

    1. 什么是SQL注入 (1) 什么是SQL注入? 所谓SQL注入,就是通过把含有SQL语句片段的参数插入到需要执行的SQL语句中,最终达到欺骗数据库服务器执行恶意操作的SQL命令. (2) 如何解决 ...

  9. JDBC SSL连接MySQL

    最近碰到个JDBC连接MySQL出现SSL错误的问题. SSL(Secure Socket Layer:安全套接字层),利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提 ...

  10. 操作数据库方法总结1——JDBC、连接池与JDBCTemplate

    本篇文章更好的阅读体验请见笔者的个人博客 引言 最近一直在操作数据库,然后就发现自己竟然只是会用Mybatis,知道JDBCTemplate,对于为什么要用它们以及它们的出现都是为了解决什么情景只能磕 ...

最新文章

  1. 抽象类可以有构造函数吗
  2. Google 是如何定制 Material 主题的?
  3. c标签 if else
  4. matplotlib错误:from matplotlib import afm, cbook, ft2font, rcParams, get_cachedirImportError: DLL load
  5. 快头条月增迅猛超微视 三四线城市“流量炼金”的上限在哪?
  6. mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?
  7. 【转载】【程序员练级】提高英语阅读水平经验分享上篇
  8. ubutun 更换网络源_Ubuntu 14.04用户修改更新源和替换软件源的方法
  9. MySQL中向下查询_mysql
  10. 程序包androidx.support.annotation不存在/import android.support.annotation.NonNull;报错
  11. 微信小程序获取手机号
  12. 关于后盾网yii框架的学习小结(1)--yii模块的安装
  13. Asp.net mvc5开源项目超级冷笑话
  14. 独家分享《非诚勿扰2》普清下载 葛优 舒淇 姚晨 孙红雷 邵兵 安以轩 廖凡
  15. STM32F030C8T6单片机与GY-61 ADXL335模块——角度传感器
  16. 如此惊艳的财务报表,领导想不重用你都难!
  17. UEditor 不调用后台
  18. 使用教程--通过Excel模板导入数据到表单
  19. 使input文本框不可编辑的3种方法
  20. 转贴两篇文章 《绩效主义毁了索尼》和《绩效考评的另一面》

热门文章

  1. 使用Python进行多项式Lo​​gistic回归
  2. leaflet地图区域数据可视化
  3. python连接SQLServer数据库,执行给定的查询SQL语句,并返回查询结果数据
  4. python交互式shell之jupyter notebook初步安装使用
  5. HTTP和HTTPS的区别以及计算机网络常见面试题总结
  6. opencv 2 归一化函数normalize详解
  7. 2021-08-06 MD5mysql 加密校验
  8. chrome 插件开发各种功能demo_Chrome扩展开发-编写一个浏览器插件
  9. 怎么解绑 微信公众号 小程序 开发平台 开发者
  10. c语言中ox1小于小于a,丹江口市2018适应性数学试卷和答案