zoukankan      html  css  js  c++  java
  • 数据库连接池

    数据库连接池

    连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、

    安全的复用,避免了数据库连接频繁建立、关闭的开销。


    java提供的连接池接口:javax.sql.DataSource,连接池厂商的连接池类需要实现这一接口。

    1、实现DataSource(javax.sql)接口,并实现连接池功能的步骤:

    2、在DataSource构造函数中批量创建与数据库的连接(Connection),并把创建的连接保存到一个集合对象中()

    创建好连接之后,把连接放到一个集合中。LinkedList.

    3、实现getConnection方法,让getConnection方法每次调用时,从集合对象中取一个Connection返回给用户。

    4、当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到连接池的集合对象中,而不要把conn还给数据库。

    池参数(所有池参数都有默认值)

    初始大小:10个

    最小空闲连接数:3个

    增量:一次创建的最小单位(5个)

    最大空闲连接数:12个

    最大连接数:20个

    最大的等待时间:1000毫秒

    四大连接参数

    连接池也是使用四大连接参数来完成创建连接对象!

    实现的接口

    连接池必须实现:javax.sql.DataSource接口!

    连接池返回的Connection对象,它的close()方法与众不同!调用它的close()不是关闭,而是把连接归还给池!

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------

    DBCP

    1、整理:

    连接池:存储连接的结合。

    需要实现javax.sql.datasource.----sun公司要求的。

    2、开源连接池。DBCP 她实现了javax.sql.datasource.

           1、getConnection(); 从集合中获取连接。

    dbcp 提供的实现类。BasicDataSrouce

    需要告诉dbcp的连接数据库参数信息。

           ds.seturl

           ds.setusername

           ds.setpassword      

           ds.setdriverClassName

    public class JDBC_DBCP {
        public static void main(String[] args) {
            BasicDataSource ds=new BasicDataSource();
            ds.setDriverClassName("com.mysql.jdbc.Driver");//设置驱动
            ds.setUrl("jdbc:mysql://localhost:3306/stu");
            ds.setUsername("root");//设置用户密
            ds.setPassword("123");//设置密码
            /*
             * JDBC六步
             * */
            Connection conn=null;
            PreparedStatement ps=null;
            try {
                 conn=ds.getConnection();
                 String sql="INSERT INTO student (sname,gender) VALUES(?,?)";
                 ps=conn.prepareStatement(sql);
                 ps.setString(1, "赵1");
                 ps.setInt(2, 22);
                 ps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            //关闭资源
            try {
                ps.close();
                conn.close();
                ds.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }    
        }
    }

    3、可以通过配置文件的方式,配置数据库的连接参数。

       dbcp要求的连接参数要放入到properties中。

     url=jdbc:mysql://localhost:3306/day08
     username=root
     password=123456
     driverClassName=com.mysql.jdbc.Driver

    把properties这个文件,转换为Properties对象给

    Properties prop = new Propterties();
    prop.load(InputStream is);
    BasicDataSrouceFatory.createDataBAse(Propterties prop);

    代码:

    public class JDBC_DBCP {
        public static void main(String[] args){ 
          
            /*
             * JDBC六步
             * */
            Connection conn=null;
            PreparedStatement ps=null;
            DataSource ds=null;
            try {
                Properties p=new Properties();
                InputStream in=new FileInputStream("src/dbconfig.properties");
                p.load(in);
                ds=BasicDataSourceFactory.createDataSource(p);
                 conn=ds.getConnection();
                 String sql="INSERT INTO student (sname,gender) VALUES(?,?)";
                 ps=conn.prepareStatement(sql);
                 ps.setString(1, "赵2");
                 ps.setInt(2, 22);
                 ps.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //关闭资源
            try {
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }    
        }
    }

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    C3P0

    手动配置

    jar:c3p0-0.9.2-pre1.jar、c3p0-oracle-thin-extras-0.9.2-pre1.jar、mchange-commons-0.2.jar
    ComboPooledDataSource ds = new ComboPooledDataSource();
    ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");
    ds.setUser("root");
    ds.setPassword("123");
    ds.setDriverClass("com.mysql.jdbc.Driver");
       
    ds.setAcquireIncrement(5) ;/*每次增加五*/
    ds.setInitialPoolSize(20) ;//初始化连接数
    ds.setMinPoolSize(2) ;//最少连接
    ds.setMaxPoolSize(50) ;//最多连接
      
    Connection con = ds.getConnection();

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    C3P0配置文件

    1. 通过默认配置初始化连接池

    配置文件要求:

    文件名称:必须叫c3p0-config.xml

    文件位置:必须在src下

    <default-config>
      <property name="xxx">XXX</property>
    </defualt-config>

    2. 通过命名配置初始化连接池

    <named-config name="orcale-config">
      <property name="xxx">XXX</property>
    </named-config>

        /**
         * 配置文件的默认配置
         * @throws SQLException 
         */
        @Test
        public void fun2() throws SQLException{
            /**
             * 在创建连接池对象时,这个对象就会自动加载配置文件!不用我们来指定
             */
            ComboPooledDataSource dataSource  = new ComboPooledDataSource();
            
            Connection con = dataSource.getConnection();
            System.out.println(con);
            con.close();
        }
        
        /**
         * 使用命名配置信息
         * @throws SQLException
         */
        @Test
        public void fun3() throws SQLException{
            /**
             * 构造器的参数指定命名配置元素的名称!
             * <named-config name="oracle-config"> 
             */
            ComboPooledDataSource dataSource  = new ComboPooledDataSource("oracle-config");
            
            Connection con = dataSource.getConnection();
            System.out.println(con);
            con.close();
        }
    }

    修改JdbcUtils

    public class JdbcUtils {
     private static DataSource dataSource = new ComboPooledDataSource();
     public static DataSource getDataSource() {
      return dataSource;
     }
     public static Connection getConnection() {
      try {
       return dataSource.getConnection();
      } catch (Exception e) {
       throw new RuntimeException(e);
      }
     }
    }
  • 相关阅读:
    REOBJECT structure
    IStorage
    如何使用电骡eMule上传资源
    WinKawaks使用技巧
    百科知识 DMG文件如何打开
    C#.NET的TabControl如何隐藏和显示页面
    生活娱乐 什么是安哥拉恐怖之颚
    生活娱乐 橄榄油的功能
    生活娱乐 冯增最牛的房车
    生活娱乐 杜甫很忙图片全集
  • 原文地址:https://www.cnblogs.com/lxp503238/p/6640508.html
Copyright © 2011-2022 走看看