资讯详情

数据库连接池

数据库连接池

概念

之所以使用数据库连接池,是因为传统的连接方法是每次数据库操作都要创建新的连接,并在操作结束后释放连接。非常浪费资源,效率低下。使用连接池技术可以一次创建多个连接,直接从池中获取连接。 连接池实际上是一个存储数据库连接的容器(集合)。当系统初始化时,容器创建,容器将申请一些连接对象。当用户访问数据库时,他们将从容器中获得连接对象。用户访问后,连接对象将归还给容器。

数据库连接池的优点

  1. 节约资源
  2. 高效

实现数据库连接池

  1. 标准接口: DataSource javax.sql包下的

    1.方法:

    • 获取连接(getConnection())
    • 返回连接(如果连接对象是从连接池中获得的,则直接调用connection.close()将连接返回数据连接池而不是关闭连接)

    2.一般数据库连接池不需要自己实现,数据库制造商已经实现了

    • C3P0:数据库连接池技术比较老

    • Druid:阿里巴巴提供的数据库连接池技术,非常优秀的数据库连接池技术

C3P0的使用

  1. 导入jar包

     c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar 
  2. 配置文件

     名称:c3p0.properties或者c3p0-config.xml   路径:将文件直接放置src目录下即可 

分析配置文件 c3p0-config.xml

<c3p0-config>   <!-- 用默认配置读取连接池对象 -->   <default-config>       <named-config name="default"></named-config>   <!--在使用C3P0获取连接时,只需传递此处的名称即可-->    <!-- 连接参数 -->     <property name="driverClass">com.mysql.jdbc.Driver</property>     <property name="jdbcUrl">jdbc:mysql://localhost:3306/sql_store</property>     <property name="user">root</property>     <property name="password">smt020528</property>          <!-- 连接池参数 -->     <property name="initialPoolSize">5</property>       <!--初始化申请的连接数量-->
    <property name="maxPoolSize">10</property>          <!--最大池容量-->
    <property name="checkoutTimeout">3000</property>    <!--超时时间-->
  </default-config>

  <named-config name="otherc3p0"> 
    <!-- 连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 连接池参数 -->
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">8</property>
    <property name="checkoutTimeout">1000</property>
  </named-config>
</c3p0-config>

注意:其中的

<default-config>
      <named-config name="default"></named-config>  

这一部分在官方下载的初始配置文件中是没有的,由于在实际中可能会创建不止一个连接池,呢么就需要给不同的连接池加以区分,最好的方法就是添加name。

DataSource dataSource=new ComboPooledDataSource();

想要使用哪个连接池,就在这个构造方法中传递哪个连接池配置文件中的name值即可。

  1. 创建核心对象 数据库连接池对象 ComblPooledDataSource

  2. 创建连接:getConnection

代码

package 连接池.C3P0;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.*;

public class Pool_Demo2 { 
        
    public static void main(String[] args) { 
        
        DataSource dataSource = new ComboPooledDataSource("default");
        try { 
        
            Connection connection = dataSource.getConnection();	
            Statement statement = null;
            ResultSet resultSet=null;
            String sql_statement = "select * from customers";
            statement=connection.prepareStatement(sql_statement);
            resultSet=statement.executeQuery(sql_statement);
           while(resultSet.next()){ 
        
               String customer_id=resultSet.getString(1);
               String first_name=resultSet.getString(2);
               String last_name=resultSet.getString(3);
               String birth_date=resultSet.getString(4);
               String phone=resultSet.getString(5);
               String addrtess=resultSet.getString(6);
               String city=resultSet.getString(7);
               String state=resultSet.getString(8);
               String points=resultSet.getString(9);

               System.out.println(customer_id+" "+first_name+" "+last_name+""+birth_date
               +" "+birth_date+" "+phone+" "+addrtess+" "+city+" "+state+" "+points);
           }


        } catch (SQLException e) { 
        
            e.printStackTrace();
        }
    }
}

Druid的使用

Druid是阿里开发的,非常优秀

  1. 导入jar包

      druid-1.0.9.jar
    
  2. 配置文件

      该配置文件是properties文件
    
      可以叫任意名称
    

配置文件解析

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/sql_store
username=root
password=********				//数据库密码
initialSize=5					//初始化的默认连即数
maxActive=10					//最大连接数
maxWait=3000					//最大等待时间


//如果在使用该连接池进行连接出现该错误:testWhileIdle is true, validationQuery not set,在
//配置文件中添加下面的配置即可。初始的配置文件中是没有下面的信息的。
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

  1. 获取数据库连接对象
 Properties properties=new Properties();
 InputStream is=Druid_Demo.class.getClassLoader().getResourceAsStream("druid.properties");
 properties.load(is);
 //获取池连接对象
 DataSource dataSource=DruidDataSourceFactory.createDataSource(properties);
 Connection connection=dataSource.getConnection();
 System.out.println(connection);

标签: 5023521000连接器连接器21fxzt

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台