自定义的C4P数据库连接池
2024-09-03 16:09:36
要想自己写一个数据库连接池 需要实现DataSoure这个类,然后重写getConnection 这个方法
public class C4p0 implements DataSource{
private List<Connection> list = new ArrayList<Connection>();
// 在创建时就创建多个连接对象
public C4p0() {
for(int i=0;i<10;i++) {
list.add(JDBCUTil.getConnection());
}
}
@Override
public Connection getConnection() throws SQLException {
if(list.size()==0) {
// 在创建几个
for(int i=0;i<5;i++) {
list.add(JDBCUTil.getConnection());
}
}
// 从集合中拿走一个conn对象
Connection conn = list.remove(0);
ConnectionWap connection = new ConnectionWap(conn, list);
// 这里需要通过装饰者模式 来重新改造close方法
return connection;
}
// 在释放连接的时候 我们想要的是把conn连接对象归还于连接池 而不是关闭连接所以我们自己写一个Connection的实现类 通过装饰者模式,我们改造了close()方法
public class ConnectionWap implements Connection{ private List<Connection> list; private Connection conn; public ConnectionWap() { // TODO Auto-generated constructor stub } public ConnectionWap(Connection conn,List<Connection> list) { this.conn = conn; this.list =list; } // 需要用到这个 @Override public PreparedStatement prepareStatement(String sql) throws SQLException { System.out.println("用的是自己写的C4p0写的哦"); return conn.prepareStatement(sql); } // 通过装饰者来装饰这个conn对象 @Override public void close() throws SQLException { // 用完将conn送回集合 list.add(conn); } }
然后进行我们的正常操作
public static void main(String[] args) { C4p0 c4p0 = new C4p0(); Connection conn = null; PreparedStatement ps = null; try { conn = c4p0.getConnection(); String sql = "insert into stu values(3,'ls')"; ps = conn.prepareStatement(sql); int cout = ps.executeUpdate(); System.out.println(cout); // 插入成功 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 这里我们需要归还conn到连接池 而不是关闭连接 、 JDBCUTil.close(ps, conn); } }
最新文章
- 指定eclipse启动使用的JVM
- MFC学习 修改窗口样式
- Tomcat server分端口部署web项目
- hadoop多次格式化后,导致datanode启动不了,怎么办?(伪分布式)
- Mac操作系统常用快捷键
- html5 input属性
- 魅蓝Note2跑分 MT6753性能究竟如何
- Jenkins学习之——(2)插件的安装
- Vijos1144小胖守皇宫【树形DP】
- linux基础 作业篇
- [HAOI 2008]糖果传递
- Python中set的功能介绍
- java常用工具(jps等)说明
- 从构建分布式秒杀系统聊聊Lock锁使用中的坑
- js中arguments详解
- Android Studio 签名 安全图片
- IDEA中的常用设置
- predict predict_proba区别的小例子
- mount 移动硬盘出现的各种小问题
- android studio 修改gradle引用本地文件
热门文章
- rxjs与vue
- C语言学习笔记10-结构体、枚举、联合体
- Spring注解驱动——组件注册系列
- Python动态展示遗传算法求解TSP旅行商问题(转载)
- postgresql interval 字段拼接
- qDebug() <;<; currentThreadId();
- JMeter-jp@gc - PerfMon Metrics Collector-CPU监控工具的配置及使用(win版本)
- BigDecimal的toString和toPlainString区别
- Java NIO学习笔记八 Pipe
- Spark中的CombineKey()详解