当前位置: 代码迷 >> 综合 >> 数据库连接池( C3P0/Druid)两种
  详细解决方案

数据库连接池( C3P0/Druid)两种

热度:74   发布时间:2023-12-04 09:54:58.0

今日内容

       1. 数据库连接池

## 数据库连接池

       1. 概念:其实就是一个容器(集合),存放数据库连接的容器。

              当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

       2. 好处:

              1. 节约资源

              2. 用户访问高效

       3. 实现:

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

                     1. 方法:

                            * 获取连接:getConnection()

                            * 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

              2. 一般我们不去实现它,有数据库厂商来实现

                     1. C3P0:数据库连接池技术

                     2. Druid:数据库连接池实现技术,由阿里巴巴提供的

       4. C3P0:数据库连接池技术

              * 步骤:

                     1. 导入jar包 (两个):

                                c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,

                            * 不要忘记导入数据库驱动jar包

                     2. 定义配置文件:

                            * 名称: c3p0.properties 或者 c3p0-config.xml

                            * 路径:直接将文件放在src目录下即可。

                     3. 创建核心对象 数据库连接池对象:

                                 ComboPooledDataSource

                     4. 获取连接:

                                 getConnection

              * 代码:                 

     //1.创建数据库连接池对象DataSource ds  = new ComboPooledDataSource();//2. 获取连接对象Connection conn = ds.getConnection();//--------归还连接到连接池中代码为:conn.close();

代码实现:

步骤导入三个扎宝 :

在ser下导入配置文件:

打开c3p0的xml 修改代码如下:

简单解释xml中的一些代码:

创建一个类进行连接:(代码如下):

/*** c3p0的演示*/public class C3P0Demo1 {public static void main(String[] args) throws SQLException {//1.创建数据库连接池对象DataSource ds  = new ComboPooledDataSource();//2. 获取连接对象Connection conn = ds.getConnection();//3. 打印System.out.println(conn);}
如若打印出东西则表示连接成功。

       5. Druid:数据库连接池实现技术,由阿里巴巴提供的

              1. 步骤:

                     1. 导入jar包 druid-1.0.9.jar

                     2. 定义配置文件:

                            * 是properties形式的

                            * 可以叫任意名称,可以放在任意目录下

                     3. 加载配置文件。Properties

                     4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory

                     5. 获取连接:getConnection

              * 代码:       

package cn.itcast.datasource.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;/*** Druid演示*/
public class DruidDemo {public static void main(String[] args) throws Exception {//1.导入jar包//2.定义配置文件//3.加载配置文件Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//4.获取连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//5.获取连接Connection conn = ds.getConnection();System.out.println(conn);}
}

        

              2. 定义工具类

                     1. 定义一个类 JDBCUtils

                     2. 提供静态代码块加载配置文件,初始化连接池对象

                     3. 提供方法

                            1. 获取连接方法:通过数据库连接池获取连接

                            2. 释放资源

                            3. 获取连接池的方法     

对工具类进行测试使用:

代码如下:

package cn.itcast.datasource.druid;import cn.itcast.utils.JDBCUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** 使用新的工具类*/
public class DruidDemo2 {public static void main(String[] args) {/** 完成添加操作:给account表添加一条记录*/Connection conn = null;PreparedStatement pstmt = null;try {//1.获取连接conn = JDBCUtils.getConnection();//2.定义sqlString sql = "insert into account values(null,?,?)";//3.获取pstmt对象pstmt = conn.prepareStatement(sql);//4.给?赋值pstmt.setString(1,"王五");pstmt.setDouble(2,3000);//5.执行sqlint count = pstmt.executeUpdate();System.out.println(count);} catch (SQLException e) {e.printStackTrace();}finally {//6. 释放资源JDBCUtils.close(pstmt,conn);}}}

  相关解决方案