测试 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();
}
} - 使用 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方法不是直接进行回收的,他还需要等待时间,没有关闭连接
- 测试如果不写 conn.close 而是调用 System.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 中连接关闭的时机的更多相关文章
- JDBC中连接MySQL数据库
package qddx.JDBC; import java.sql.*; public class JDBC_Connection { static String driverName = &quo ...
- Java中通过JDBC远程连接Oracle数据库
通过jdbc连接数据库,拢共分三步: 第一步:下载一个JDBC的驱动,然后把jar包扔到项目里并add to build path: 第二步:去本地oracle文件夹下找到“TNSNAMES.ORA” ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- day18-事务与连接池 3.jdbc中事务操作介绍
那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...
- 037 SparkSQL ThriftServer服务的使用和程序中JDBC的连接
一:使用 1.实质 提供JDBC/ODBC连接的服务 服务运行方式是一个Spark的应用程序,只是这个应用程序支持JDBC/ODBC的连接, 所以:可以通过应用的4040页面来进行查看操作 2.启动服 ...
- SparkSQL ThriftServer服务的使用和程序中JDBC的连接
SparkSQL ThriftServer服务的使用和程序中JDBC的连接 此时要注意版本问题,我第一次用的是hive2.1.1的,因为要用sparksql的hive服务,但是sparksql默认的是 ...
- jmeter中通过jdbc方式连接mysql数据库的配置参考
jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...
- JDBC 和连接池
1 JDBC概述 Java DataBase Connectivity,Java数据库连接,一种执行SQL的Java API,为多种关系数据库提供统一访问规范,由一组Java语言编写的类和接口组成.数 ...
- JDBC之 连接池
JDBC之 连接池 有这样的一种现象: 用java代码操作数据库,需要数据库连接对象,一个用户至少要用到一个连接.现在假设有成千上百万个用户,就要创建十分巨大数量的连接对象,这会使数据库承受极大的压力 ...
随机推荐
- Hive 遇到 Class path contains multiple SLF4J bindings
Hive 遇到 Class path contains multiple SLF4J bindings Root Issue; slf4j在两处找到了jar包.分别是在Hadoop和hive的安装目录 ...
- 关系型数据库---MySQL---对中文字段排序
1.对中文进行排序时会发生错误,原因是使用的字符集不是中文的字符集: 解决:CONVERT函数 SELECT a.id,a.`name`,a.ch_name FROM `user` a ORDER B ...
- C++的静态Static
类的静态数据成员是属于类(即与类关联)而不属于类的每个对象(不与类的每个对象关联)(相当于该静态对象在所有的类对象中共享.),所以初始化方法与一般的变量不同,需要在类的构造函数之外进行初始化. 类的静 ...
- Kure讲HTML_列表标签及表单标签
首先我上个图来告诉大家什么是列表 左侧的这一部分就可以称为是列表或者叫树,其实我们可以通过div+css实现列表,可是考虑语义化的问题,我们还是看看html提供好的列表标签,html提供了两种列表,一 ...
- Prestashop后台模块(中英转译)
=======================Prestashop-Modules========================= Pretashop运行起来非常慢,这个大家应该都知道,最近要给这个 ...
- Quartz使用(6) - Quartz项目实战
本片博文将阐述项目工作中使用Quartz的情况,包含项目背景.项目框架.Quartz集群部署等方面,重点讲述如何在实际项目中使用Quartz. 1. 背景 因项目需求,需要定时调用数据下载接口,并将数 ...
- 多ComboBox实现复杂查询
关键是,你是要实现什么功能:是四个条件都有内容时查询,还是哪个内容有查哪个? 如果四个组合框都有内容,相对简单些: string s = "select * from 表名 where 身份 ...
- Geek to Live: Set up your personal Wikipedia
http://lifehacker.com/163707/geek-to-live--set-up-your-personal-wikipedia Filed to: Wikipedia Captur ...
- 代码“小白”的温故而知新(一)-----OA管理系统
古人云:温故而知新.这是极好的,近来,作为一个小白,利用点空闲时间把之前几个月自己写过的一个作为练手的一个OA系统又重新拿来温习一番,希望在巩固基础之上能得到新的启示.现在回想起来,之前一个人,写写停 ...
- intellijidea课程 intellijidea神器使用技巧 5-1 svn相关
subversion ==> show local history 查看历史记录 Ctrl D 历史记录对比 ctrl alt z 复原