zoukankan      html  css  js  c++  java
  • 自定义连接池DataSourse

    自定义连接池DataSourse

    连接池概述:

      管理数据库的连接,
    作用:
      提高项目的性能.就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.所有的连接池必须实现一个接口 javax.sql.DataSource接口


    获取连接方法:
      Connection getConnection()
    归还连接的方法就是以前的释放资源的方法.调用connection.close();

    常用连接池:
    DBCP、C3P0

    自定义连接池:

      1.创建一个DataSourse项目

      2.新建一个包,com.dbcp.hjh;包下新建一个java类DataSourseTest.java

      3.创建一个工具包com.util.hjh,放工具类JDBCUtil.java

      4.导入jar包mysql-connection-java-5.1.47.jar;记得导入后bulidPath以下

    工具类JDBCUtil.java代码:

    package com.util.hjh;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBCUtil {
        final static String driver = "com.mysql.jdbc.Driver";
        final static String url = "jdbc:mysql://localhost/hejh?useUnicode=true&characterEncoding=UTF-8";
        final static String user  = "root";
        final static String password = "root";
        
        Connection conn = null;
        PreparedStatement ps = null;
        Statement st = null;
        ResultSet rs = null;
            
        /**获取连接*/
        public static Connection getConnection() throws SQLException  {
            Connection    conn = null;
            try {
                //注册驱动
                Class.forName(driver);
                //获取连接
                conn = DriverManager.getConnection(url, user, password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }                    
            return conn;    
        }
        
        /**关闭资源closeResourse(conn,st)*/
        public static void closeResourse(Connection conn,Statement st) {
            try {
                if(st!=null) {
                    st.close();
                }else {
                    st = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        /**关闭资源closeResourse(conn,ps)*/
        public static void closeResourse(Connection conn,PreparedStatement ps) {
            try {
                if(ps!=null) {
                    ps.close();
                }else {
                    ps = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        /**关闭资源closeResourse(rs)*/
        public static void closeResourse(ResultSet rs) {
            try {
                if(rs!=null) {
                    rs.close();
                }else {
                    rs = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                
            }
        }
    }

    DataSourseTest.java代码:

    package com.dbcp.hjh;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.LinkedList;
    import com.util.hjh.JDBCUtil;
    
    //自定义连接池
    public class DataSourseTest {
    
        static LinkedList<Connection> pool = new LinkedList<>();//定义一个连接池
        //初始化时,放入三个连接
        static {
            for(int i=0;i<3;i++) {
                try {
                    Connection conn = JDBCUtil.getConnection();
                    pool.add(conn);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
        //从连接池中获取连接
        public static Connection getConnection() {
            //获取连接之前需判断是否为空
            if(pool.isEmpty()) {
                //如果连接池为空,新建2个连接
                for(int i=0;i<2;i++) {
                    try {
                        Connection conn = JDBCUtil.getConnection();
                        pool.add(conn);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
            return pool.removeFirst();
        }
        
        //归还连接
        public static void backConn(Connection conn) {
            //将conn放入到list的最后面即可
            pool.addLast(conn);
            System.out.println("归还连接啦");
        }
        
        public static void main(String[] args) {
            //创建连接池
            DataSourseTest ds = new DataSourseTest();
            //获取连接
            Connection conn = ds.getConnection();
            System.out.println("即将获取一个连接:");
            System.out.println(conn);
            //归还连接,不做其他操作
            ds.backConn(conn);
        }
    }

     eclipse中console输出:

    即将获取一个连接:
    com.mysql.jdbc.JDBC4Connection@8de145
    归还连接啦
  • 相关阅读:
    hdu4347 The Closest M Points(kdtree+stl)
    bzoj1941 [Sdoi2010]Hide and Seek
    bzoj1941 [Sdoi2010]Hide and Seek
    bzoj2648 SJY摆棋子(不带修改的KDtree的学习)
    bzoj2648 SJY摆棋子(不带修改的KDtree的学习)
    bzoj2588 Spoj 10628. Count on a tree
    hdu2665 Kth number(主席树模板)
    hdu2665 Kth number(主席树模板)
    luoguP3168 [CQOI2015]任务查询系统
    12.模板别名以及auto定义返回值
  • 原文地址:https://www.cnblogs.com/hejh/p/10867832.html
Copyright © 2011-2022 走看看