栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java JDBC连接池

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java JDBC连接池

目录

1.连接池了解

2.C3P0连接池

2.1 什么是C3P0

2.2 使用C3P0

第一步:导入jar

第二步:添加配置文件

第三步:创建DataSource

第四步:获取Connection

第五步:获取PreparedStatement执行SQL

第六步:遍历结果集

第七步:释放资源

完整代码

2.3 ComboPooedDataSource介绍

3.Druid连接池

3.1 Druid介绍

3.2  使用Druid

第一步:导入jar

第二步:添加配置文件

第三步:加载配置文件

第四步:获取DataSource

第五步:获取Connection

第六步:操作数据库

第七步:关闭资源

完整代码

3.3 使用工具类

1.连接池了解

        连接池就是存储我们数据库连接对象的容器,系统初始化后,会去申请一些连接对象,用户访问数据库时,回去容器中获取数据库连接对象,使用完毕后会归还给容器

好处

        1. 提高资源利用率
        2. 提高访问速度

DataSource

        java提供的接口, DataSource接口由框架编写者实现

        方法

​            Connection getConnection()

​                获取连接

​            close()  Connection类中

​                归还连接对象,如果调用的是连接池中的Connection 对象的close()方法,就不会关闭连接,会将该连接归还给连接池

实现DataSource

        一般情况下不需要我们实现此接口,一下两种连接池会帮我们连接:

                1. C3P0
                2. Druid   (由阿里巴巴提供)

2.C3P0连接池

2.1 什么是C3P0

        C3P0是目前较为流行的开源数据库连接池,支持JDBC2和JDBC3规的标准规范,易于扩展并且性能优越,目前被Hibernate、Spring等框架使用。

2.2 使用C3P0

第一步:导入jar

使用C3P0需要导入的包(2个)

        c3p0-0.9.5.2.jar

        mchange-commons-java-0.2.11.jar

注意别忘记导入mysql驱动

        mysql-connector-java-5.1.8.jar

第二步:添加配置文件

        在使用C3P0时,可以将数据库配置写到配置文件中,C3P0默认会到src根目录下加载名称为c3p0-config.xml的xml文件,配置文件内容如下

配置文件中添加了默认节点和自定义节点(myApp)



   
   
      com.mysql.jdbc.Driver
      jdbc:mysql://localhost/test2
      root
      root
   

   
   
      root
      root
      com.mysql.jdbc.Driver
      jdbc:mysql://localhost:3306/test2
      
      10
      
      30
      
      100
   

第三步:创建DataSource

读取默认节点(节点配置的信息)

        DataSource cpds = new ComboPooledDataSource();

读取指节点

        DataSource cpds = new ComboPooledDataSource("myApp");

第四步:获取Connection

获取数据库连接对象

        Connection conn = cpds.getConnection();

第五步:获取PreparedStatement执行SQL

获取PreparedStatement执行sql语句

        String sql = "SELECt * FROM user";
        PreparedStatement ps = conn.prepareStatement(sql);

        ResultSet rs = ps.executeQuery();

第六步:遍历结果集

while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("username");
    String password = rs.getString("password");
    System.out.println(id + name + password);
}

第七步:释放资源

rs.close();

ps.close();
conn.close();

完整代码
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Demo01 {
    public static void main(String[] args) throws SQLException {
        // 3.创建DataSource
        // 读取默认节点的配置
        DataSource ds = new ComboPooledDataSource();
        // 4.获取Connection对象
        Connection conn = ds.getConnection();
        // 5.执行SQL
        String sql = "select * from user ";
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        // 6.遍历结果集
        System.out.println("id    username    password    email");
        while (rs.next()) {
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("password");
            String email = rs.getString("email");
            System.out.println(id + "   " + username + "   " + password + "   " + email);
        }
        // 7.释放资源
        rs.close();
        ps.close();
        conn.close();
    }
}

运行结果:

 红色部分为日志

2.3 ComboPooedDataSource介绍

ComboPooedDataSource是DataSource接口的实现类,主要包含设置数据源对象的方法

方法名

功能

setDriverClass()

设置连接数据库的驱动名称

setJdbcUrl

设置连接数据库的路径

setUser()

设置数据库的登陆账号

setPassword()

设置数据库的登陆密码

setMaxPoolSize()

设置数据库连接池最大的连接数目

setMinPoolSize()

设置数据库连接池最小的连接数目

setInitialPoolSize()

设置数据库连接池初始化的连接数目

getConnection()

从连接池中获取一个数据库连接

        想要使用C3P0,首先需要创建数据源对象,创建数据源对象使用ComboPooledDataSource类

3.Druid连接池

3.1 Druid介绍

        阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好,Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给DataSource对象。

好处:

  1. 替代C3P0、DBCP数据库连接池(因为它的性能更好)
  2. 自带监控页面,实时监控应用的连接池情况

3.2  使用Druid

第一步:导入jar

        导入jar包:druid-1.0.9.jar(或者其他版本的)

        导入数据库驱动:mysql-connector-java-xxx.jar

第二步:添加配置文件

定义配置文件,后缀名properties,名称随意,可以放到任意目录,一般在src根目录下

配置文件内容为

druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test2
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

第三步:加载配置文件

使用Properties加载配置文件

Properties pro = new Properties();
pro.load(Demo.class.getClassLoader().getResourceAsStream("druid.properties"));

第四步:获取DataSource

获取DataSource对象

DataSource ds = DruidDataSourceFactory.createDataSource(pro);

第五步:获取Connection

获取Connection对象

Connection conn = ds.getConnection();

第六步:操作数据库

通过Connection 对象操作数据库

String sql = "select * from user";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
System.out.println("id    username    password    email");
while (rs.next()) {
    int id = rs.getInt("id");
    String username = rs.getString("username");
    String password = rs.getString("password");
    String email = rs.getString("email");
    System.out.println(id + "   " + username + "   " + password + "   " + email);
}

第七步:关闭资源
rs.close();
ps.close();
conn.close();

完整代码
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

public class Demo {
    public static void main(String[] args) throws Exception {
        // 3.加载配置文件
        Properties pro = new Properties();
        pro.load(Demo.class.getClassLoader().getResourceAsStream("druid.properties"));
        // 4.获取DataSource
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        // 5.获取Connection
        Connection conn = ds.getConnection();
        // 6.操作数据库
        String sql = "select * from user";
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        System.out.println("id    username    password    email");
        while (rs.next()) {
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("password");
            String email = rs.getString("email");
            System.out.println(id + "   " + username + "   " + password + "   " + email);
        }
        // 7.关闭资源
        rs.close();
        ps.close();
        conn.close();

    }
}

运行结果:

 

3.3 使用工具类
  1. 加载配置文件
  2. 添加获取连接池的方法
  3. 添加获取连接的方法
  4. 添加关闭资源的方法

编写工具类:

import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {
    // 加载配置文件
    static DataSource ds;

    static {
        Properties pro = new Properties();
        try {
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    public static DataSource getDataSource() {
        return ds;
    }

    
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    
    public static void close(ResultSet rs, Statement st, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使用工具类

@Test
    public void t1() throws SQLException {
        Connection conn = JDBCUtils.getConnection();
        String sql = "select * from user";
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        System.out.println("id    username    password    email");
        while (rs.next()) {
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("password");
            String email = rs.getString("email");
            System.out.println(id + "   " + username + "   " + password + "   " + email);
        }
        JDBCUtils.close(rs,ps,conn);

    }

运行结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/919292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号