测试 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();
    }
    }
  • 使用 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; @Override
      public 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() {
      }
      }

      使用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));
      }
      }
    • 测试调用 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();
}
}
    • 测试如果不写 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();
}
}

    

创建一张表,插入随机的 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);
-- 进行加i
set @i=@i+1;
-- 退出
END WHILE;
-- 提交事务
commit;
select '成功录入';
end $$
delimiter ; call randtableadd(100000);

测试 jdbc 中连接关闭的时机的更多相关文章

  1. JDBC中连接MySQL数据库

    package qddx.JDBC; import java.sql.*; public class JDBC_Connection { static String driverName = &quo ...

  2. Java中通过JDBC远程连接Oracle数据库

    通过jdbc连接数据库,拢共分三步: 第一步:下载一个JDBC的驱动,然后把jar包扔到项目里并add to build path: 第二步:去本地oracle文件夹下找到“TNSNAMES.ORA” ...

  3. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

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

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

  5. 037 SparkSQL ThriftServer服务的使用和程序中JDBC的连接

    一:使用 1.实质 提供JDBC/ODBC连接的服务 服务运行方式是一个Spark的应用程序,只是这个应用程序支持JDBC/ODBC的连接, 所以:可以通过应用的4040页面来进行查看操作 2.启动服 ...

  6. SparkSQL ThriftServer服务的使用和程序中JDBC的连接

    SparkSQL ThriftServer服务的使用和程序中JDBC的连接 此时要注意版本问题,我第一次用的是hive2.1.1的,因为要用sparksql的hive服务,但是sparksql默认的是 ...

  7. jmeter中通过jdbc方式连接mysql数据库的配置参考

    jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...

  8. JDBC 和连接池

    1 JDBC概述 Java DataBase Connectivity,Java数据库连接,一种执行SQL的Java API,为多种关系数据库提供统一访问规范,由一组Java语言编写的类和接口组成.数 ...

  9. JDBC之 连接池

    JDBC之 连接池 有这样的一种现象: 用java代码操作数据库,需要数据库连接对象,一个用户至少要用到一个连接.现在假设有成千上百万个用户,就要创建十分巨大数量的连接对象,这会使数据库承受极大的压力 ...

随机推荐

  1. 从c到cpp对static 关键字的总结 需要整理下!!!!!!!!!!!!!!!!!!!!!!

    一个完整的程序,在内存中的分布情况如下: 具体分布图     自己看书去!!!!!1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区.会随着作用于退出而释放空间.3.堆区:程序员分配并 ...

  2. drop_caches控制page cache

    drop_caches Writing to this will cause the kernel to drop clean caches, as well as reclaimable slab ...

  3. [转]jQuery.getJSON的缓存问题的解决办法

    本文转自:http://mfan.iteye.com/blog/974132 今天做测试工作,发现了一个令我费解的问题,jquery的getJson方法在firefox上运行可以得到返回的结果,但是在 ...

  4. [转]jquery插件创建 jquery.fn.extend与jquery.extend

    本文转自:http://www.cnblogs.com/wyjgreat/archive/2011/07/19/2110754.html jQuery为开发插件提拱了两个方法,分别是: JavaScr ...

  5. java多线程异常捕获

    java多线程中出现了异常,如何捕获.利用UncaughtExceptionHandler这个接口就可以了. 代码如下: package com.ming.thread.six.threadcreat ...

  6. RadControl使用相同的Theme

    我們僅須對兩個地方加一些程式碼,就可使所有的RadControl擁用相的Theme,如此一下不但可使Ap內布景主題一致,設計者亦不需要對每個控件做字型,顏色,大小等等瑣碎的設計. App.Xaml.c ...

  7. Windows窗体应用开发1

    1.Windows窗体的基本概念 2.Windows窗体应用程序 3.Windows窗体常见界面元素 4.Windows窗体中的事件处理 1.Windows窗体的基本概念 打开一个Window的系统应 ...

  8. Redis学习1

    Redis 学习记录 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zs ...

  9. Visual Studio 2017 安装失败,你们有这样的问题吗?怎么解决

    由于发生一个或多个包故障,产品未能安装列出的工作负荷和组件. 工作负荷不完整 使用 JavaScript 的移动开发 (Microsoft.VisualStudio.Workload.WebCross ...

  10. python反爬之用户代理

    # requests是第三方库,需要安装 pip install requests import requests import random # 通常很多网站都会设置检测请求头中的User-Agen ...