c3po简单了解
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,package com.hanchao.test;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.R
千家信息网最后更新 2025年02月23日c3po简单了解
package com.hanchao.test;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Scanner;import javax.sql.DataSource;import com.mchange.v2.c3p0.DataSources;/*********************** * @author:han * @version:1.0 * @created:2015-10-11 *********************** */public class TestPool { public static void main(String[] args) { /* Scanner input = new Scanner(System.in); System.out.println("请输入账号:"); String name = input.next(); System.out.println("请输入密码:"); String pwd = input.next(); System.out.println("请输入金额:"); float money = input.nextFloat();*/ final String DRIVER = "com.mysql.jdbc.Driver"; //final String URL = "jdbc:mysql://127.0.0.1:3306/mydb"; //final String URL = "jdbc:mysql://localhost:3306/mydb"; final String URL = "jdbc:mysql:///mydb"; final String NAME = "root"; final String PASSWORD = "root"; Connection conn = null; Statement stat = null; ResultSet rs = null; try { //1.加载数据库驱动 Class.forName(DRIVER); //连接mysql数据库 DataSource unpooled = DataSources.unpooledDataSource(URL,NAME,PASSWORD); //构建一个连接池 DataSource pooled = DataSources.pooledDataSource(unpooled); //2.获取数据库连接(first Time) conn = pooled.getConnection(); System.out.println("1 con Class Type is :" + conn.getClass().getName()); //取得内部的实际数据库连接 Object o1 = getInner(conn); System.out.println("1 Inner con Class Type is :" + o1.getClass().getName()); //3.获取Statement对象 stat = conn.createStatement(); //4.执行SQL rs = stat.executeQuery(" select * from t_user where id = 13"); while (rs.next()) { System.out.println(" username:" + rs.getString("username")); } //5.关闭连接 rs.close(); stat.close(); conn.close(); //6.等待连接返回池中 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //第二次获取数据库连接 conn = pooled.getConnection(); System.out.println("2 con Class Type is :" + conn.getClass().getName()); Object o2 = getInner(conn); System.out.println("2 Inner con Class Type is :" + o2.getClass().getName()); //获取Statement对象 stat = conn.createStatement(); //3.获取Statement对象 stat = conn.createStatement(); //4.执行SQL rs = stat.executeQuery(" select * from t_user where id = 13"); while (rs.next()) { System.out.println(" username:" + rs.getString("username")); }/* //3.获取Statement对象// String sql = "delete from t_user where id = 13";// String sql = "insert into t_user(username,address) values('tom1','USA1')"; StringBuilder sql = new StringBuilder(); sql.append("INSERT INTO t_account(username,`password`,money,`enable`) "); sql.append("VALUES "); sql.append("('"+name+"','"+pwd+"','"+money+"','1')"); System.out.println("SQL:" + sql.toString()); //执行SQL// int rows = stat.executeUpdate(sql); int rows = stat.executeUpdate(sql.toString()); if (rows > 0) { System.out.println("execute OK!!"); } else { System.out.println("execute error !!"); } */ } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stat != null) { stat.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } private static Object getInner(Object conn) { Object object = null; Field f ; try { f = conn.getClass().getDeclaredField("inner"); f.setAccessible(true); object = f.get(conn); f.setAccessible(false); } catch (Exception e) { e.printStackTrace(); } return object; }}
结果:
首先,从数据库连接池获得一个连接。发现连接类型并不是mysql的数据库连接,而是,com.mchange.v2.c3p0.impl.NewProxyConnection。通过类名,可以推测,从数据库连接池中获取的只是一个代理。
当我们关闭.NewProxyConnection连接时,并没有真正关闭连接,而只是将数据库连接放入连接池保存,使得数据库连接在连接池中得到复用。而从连接池返回的NewProxyConnection对象,只是对真实数据库连接的包装。
数据
数据库
对象
只是
输入
实际
密码
类名
类型
结果
而是
账号
金额
代理
包装
复用
驱动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ua服务器安全策略设置
蔡甸区全过程网络安全维护报价表
网站Excel文档数据库建立
零点定时修改数据库值
四川大学网络安全学院地址
侠义道2服务器
网络安全法的爆发日期
石嘴山软件开发公司案例
山东省济南名云网络安全公司
数据库管理工具原理
吉林智慧养老软件开发电话
浙江恩牛网络技术
lol手游选手数据库
在线招聘网站数据库设计
阿里云如何购买服务器挂载盘
宝山区市场软件开发收费套餐
泉州易宝软件开发有限公司
群星多人模式服务器
儿歌弹唱软件开发
网络安全关键是人才的竞争
linux安装什么数据库
服务器 中间数据库
浙江大型软件开发价格多少
自动售货机数据库表结构
大专生新加坡做软件开发
网络安全宣传现场咨询
有外国节点的服务器
在数据库技术中编写程序
定向软件开发销售增值税
阿里云如何购买服务器挂载盘