c3po简单了解
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,package com.hanchao.test;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.R
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
网络安全大赛荣誉证书
ibm服务器如何硬盘检测
什么csgo服务器可以得箱子
怎样查网站服务器地址
互联网科技公司发展战略
模式是数据库的逻辑视图吗
网络技术特别适用于
芜湖软件开发app价格
软件开发在贵州怎么样
lol体验服连接服务器连不上
数据库字段名可包含的字符是
台州讯业网络技术
厂区监控服务器维修费
数据库日期时间转换成日期
深圳律溶软件开发
亿达软件开发区
数据库表结构设计的描述
天津安全服务器散热风扇厂
网络安全法是什么时间出的
列表获取数据库数据
sun服务器代理商
百战天虫大混子连接不到服务器
计算机网络技术专业难学
麦积区网络安全宣传周
维护网络安全空间主权
山西oa软件开发承诺守信
在网吧如何连接云服务器
按时间顺序查询数据库语句怎么写
阿里云服务器降级
脉脉科技互联网考题