自定义连接池一:1.sun提供了一个连接池接口 javax.sql.DataSource。2.定义连接池MyDataSource实现接口DataSource。3.使用集合LinkedList<Connection> pool存放多个连接对象。LinkedList移除添加操作效率高。连接对象还是和以前一样调用工具类JDBCUtils里的getConnection。(第一篇JDBC的有介绍)4.书写获取连接的方法getConnection(),获取连接改为从池子中拿对象。5.书写归还连的方法backConnection()。把从池子pool中获取的对象归还。我们需要三个类:  1.JDBCUtils(第一篇JDBC的随笔有介绍如何书写)  2.MyDataSource  3.TestMyDataSource

注:测试用的Junit。

一、书写MyDataSource方法,此处不实现接口DataSource
package com.it.JDBC;import java.sql.Connection;
import java.util.LinkedList;/*** @author Payphone* @time 2017-10-07 自定义连接池,未增强close方法* */
public class MyDataSource {private static Connection conn;private static LinkedList<Connection> pool = new LinkedList<Connection>();/*** 构造方法初始化连接池个数,也可用静态代码块初始化。* */public MyDataSource() {for (int i = 0; i < 5; i++) {conn = JDBCUtils.getConnection();pool.add(conn);}System.out.println("---------分割线---------");}/*** 获取连接* */public Connection getConnection() {System.out.println("连接前的个数:" + pool.size());conn = pool.remove(0);System.out.println("连接后的个数:" + pool.size());return conn;}/*** 归还连接* */public void backConnection() {System.out.println("释放连接前的个数:" + pool.size());pool.add(conn);System.out.println("释放连接后的个数:" + pool.size());}
}

二、书写测试方法TestMyDataSource

package com.it.TestJDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;

import com.it.JDBC.JDBCUtils;
import com.it.JDBC.MyDataSource;

public class TestMyDataSource {

@Test
    public void testAddUser() {
        Connection conn = null;
        MyDataSource md = new MyDataSource();
        PreparedStatement psmt = null;
        try {
            conn = md.getConnection();
            String sql = "insert into t_user(id,pwd) values(?,?)";
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1, 2015005);
            psmt.setString(2, "2015005");
            int rows = psmt.executeUpdate();
            if (rows > 0) {
                System.out.println("插入数据成功!");
            } else {
                System.out.println("插入数据失败!");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            JDBCUtils.Release(null, psmt, null);
            md.backConnection();
        }
    }
}

自定义连接池一代码并不完善,我们调用了工具类JDBCUtils.Release方法释放了除conn外的对象。又调用了md.backConnection方法归还conn。

在自定义连接池二的代码中我们将增强close方法。调用工具类JDBCUtils.Release方法归还连接。

 

转载于:https://www.cnblogs.com/ljwdemo/p/7636102.html

JDBC(连接池) -- 02(I)相关推荐

  1. jdbc封装mysql_用Java手动封装JDBC连接池(一)

    JDBC存在的问题 代码的冗余:在对数据库进行增删改查时,每个操作的JDBC流程和SQL执行代码的流程都一样,造成代码的冗余,所以我们可以把冗余的部分封装起来,封装之后,我们就不用再去写JDBC流程, ...

  2. HikariCP 高性能的 JDBC 连接池

    HikariCP 是一个高性能的 JDBC 连接池组件.下图是性能的比较测试结果: 使用方法: HikariConfig config = new HikariConfig(); config.set ...

  3. 在独立Java应用程序中使用Tomcat JDBC连接池

    这是从我们的客人文章W4G伙伴克拉伦斯豪的作者临春3从A按. 您可能会在文章结尾找到本书的折扣券代码,仅适用于Java Code Geeks的读者! 请享用! 在需要数据访问权限的独立Java应用程序 ...

  4. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

  5. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  6. jdbc连接池工作原理_JDBC连接实际上如何工作?

    jdbc连接池工作原理 The JDBC Connection interface is a part of java.sql package. The java.sql.Connection int ...

  7. JDBC、封装JDBC连接池、第三方连接池工具

    主要内容: JDBC简介 JDBC来源 通过代码实现JDBC JDBC的改进需求 JDBC改进的代码实现 JDBC使用的设计模式 封装连接池 封装JDBC连接池 ThreadLoacl的使用 Thre ...

  8. JDBC,JDBC连接池和JNDI

    最初级的用法,也可以说是菜鸟 显式地把 JDBC 驱动程序.数据库 URL 以及用户名和口令编码到程序中 Connection conn=null; String url = "jdbc:m ...

  9. 各种JDBC连接池配置参数比较

    苟且,诗与远方 各种JDBC连接池参数比较

最新文章

  1. 局域网共享问题解决方法!
  2. 大数据及Linux安装
  3. 上下文 及 执行上下文
  4. JVM与Java的体系结构(JVM入门知识体系总结)
  5. 关于ShopEx的二次开发的目录结构及各文件功能
  6. 无法连接上 cn.archive.ubuntu.com:80 (123.129.214.98)。 - connect (111: 拒绝连接)
  7. 每个前端工程师都应该去了解的前端面试题总结(一)
  8. java 将list按指定大小等分,最后多余的单独一份
  9. 雷霆战机源代码c语言,C++实现雷霆战机可视化小游戏
  10. Android 系统(212)---monkey实战–测试步骤、常用参数、常规monkey命令
  11. 基金盘后业务的详细设置
  12. mac 查看端口的使用情况
  13. Python day17 模块介绍1(time,random)
  14. ios::ate和ios::app在C++文件中的区别
  15. “云湖共生 • 数智未来”数据湖应用实践白皮书重磅发布
  16. 细丝菲涅尔衍射MATLAB,任意孔型菲涅尔衍射matlab仿真.docx
  17. 个人博客重写,心路历程【尚未佩脱剑,转眼便江湖。愿历经千帆,归来仍是少年。】
  18. 通过Log4j生成CSV格式日志时自动插入表头处理方法
  19. 激光振镜误差校正算法C语言,一种基于双线性插值法的激光振镜图形校正算法的制作方法...
  20. 【Android真机app的性能测试(CPU,内存,启动时间)】

热门文章

  1. 函数可重入问题reentrant functions
  2. 【python】循环结构if、for 、while
  3. windows下javadoc生成文档注释的命令
  4. 08-06 性能测试--测试报告与数据
  5. oracle异步sql,Linux上Oracle是否使用异步io的诊断
  6. react加水印_给网页增加水印的方法,react
  7. 计算机应用基础 东师 离线,东师1609计算机应用基础离线作业(8页)-原创力文档...
  8. 2021年,Web前端还好找工作吗?
  9. android系统应用程序,Android调用系统应用程序
  10. 我的世界JAVA版编程语言_Java版版本记录/开发版本