zoukankan      html  css  js  c++  java
  • jdbc 链接池

    package cn.itcast.jdbc.datasourse;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.LinkedList;

    public class MyDataSourse {
        private static String url = "jdbc:mysql://localhost:3306/test";
        private static String user = "root";
        private static String pwd = "";
        
        //用于存放链接
        private LinkedList<Connection> connectionsPool = new LinkedList<Connection>();
        
        //初始化链接池时,向链接池内放入10个链接   
        public MyDataSourse(){
            try {
                for(int i = 0;i< 10 ;i++){
                    this.connectionsPool.addLast(this.createConnection());
                }
            } catch (SQLException e) {
    //            e.printStackTrace();
                throw new ExceptionInInitializerError(e);
            }
        }
        //得到链接
        public Connection getConnection(){
            return this.connectionsPool.removeFirst();
        }
        
        //释放链接  如果用链接池的话,当我们要释放资源的时候就不能够简单的把conn给关闭掉,而应该是把conn重新放回到链接池中
        public void free(Connection conn){
            this.connectionsPool.addLast(conn);
        }
        //创建链接
        private Connection createConnection() throws SQLException{
            return DriverManager.getConnection(url,user,pwd);
        }
    }
    /*
     * 当我们对数据库进行操作时,往往花费在建立和数据库的链接时花费的时间最长,所以最好就是链接保证链接不要
     * 频繁的建立,这时就应该考虑到创建一个链接池,每次用的时候直接从链接池中去取,用完后再放回去
     * 这样做虽然在创建时花费的时间会很长,但是一旦创建完成,在用的时候就能够很好的提高效率
     * */
    //////////////////////////////////////此时jdbcUtils包就应该改为这样//////////////////////////////////////////////////////////////////////////

    package cn.itcast.jdbc;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import cn.itcast.jdbc.datasourse.MyDataSourse;

    public final class JdbcUtils {
        private static String url = "jdbc:mysql://localhost:3306/test";
        private static String user = "root";
        private static String password = "";
       // private static MyDataSourse myDataSourse = new MyDataSourse();    //这里myDataSourse不能在这里进行初始化,因为myDataSourse的初始化动作之前需要先注册驱动

      private static MyDataSourse myDataSourse = null;  //此处只需要声明一下,初始化动作放在注册驱动的后面,不然会报初始化异常

        // 私有的构造方法
        private JdbcUtils() {
        }

        // 把注册驱动的动作放在静态代码块内
        static {
            try {
                Class.forName("com.mysql.jdbc.Driver");

        myDataSourse = new MyDataSourse();    //初始化动作放在注册驱动的后面


            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                throw new ExceptionInInitializerError(e);
            }
        }

        // 建立链接
        public static Connection getConnection() throws SQLException {
    //        return DriverManager.getConnection(url, user, password);
            return myDataSourse.getConnection();
        }

        // 释放资源
        public static void free(ResultSet rs, Statement st, Connection conn) {
            try {
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (st != null) {
                        st.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (conn != null) {
                            //conn.close(); 当使用链接池时,此处就不能够简单的关闭掉该conn了
                            myDataSourse.free(conn);//此时应该把链接conn重新放回到链接池中
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

  • 相关阅读:
    docker基本指令
    Process API
    Go的Context用法
    golang的可空类型和零值
    动态编程(DynamicObject、ExpandoObject)
    git clean
    SQL Server Join
    公用表表达式 Common Table Expression
    ubuntu安装mysql
    asp.net core-使用Nlog和log4net
  • 原文地址:https://www.cnblogs.com/siashan/p/3881225.html
Copyright © 2011-2022 走看看