• JDBC(连接池) -- 02(I)


    自定义连接池一:
        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方法归还连接。

     
  • 相关阅读:
    poj 2485 (kruskal)
    poj 1258
    poj 2253 (dijkstra 变形)
    poj 2485 (prim)
    poj 1125 (floyd)
    poj 2240 Arbitrage (floyd 变形)
    poj 3020 Antenna Placement(二分图+最小路径覆盖)
    poj 3020 Antenna Placement(二分图+最小路径覆盖)
    poj 3278 Catch That Cow (bfs 搜索)
    poj 2049 Finding Nemo(搜索)
  • 原文地址:https://www.cnblogs.com/ljwdemo/p/7636102.html
Copyright © 2020-2023  润新知