zoukankan      html  css  js  c++  java
  • C3P0连接池

    1.C3P0连接池
    * 创建C3P0连接池的工具类:我们可以使用工具类获取数据库连接对象conn
    * 连接池的规范接口:javax.sql.DataSource 接口
    * 接口中的获取连接的方法:Connection getConnection() 尝试建立与此 DataSource 对象所表示的数据源的连接。
    *
    * C3P0连接池实现了连接池的规范接口DataSource,重写了接口中获取连接的方法 getConnection
    * com.mchange.v2.c3p0.ComboPooledDataSource implements DataSource接口
    *
    * C3P0连接池工具类的创建步骤:
    * 1.在成员位置创建一个ComboPooledDataSource对象
    * 2.创建一个静态代码块(只执行一次,提高效率)
    * 使用ComboPooledDataSource中的setXXX方法,设置数据库的4大基本信息
    * 注册驱动,url,用户名,密码
    * 3.创建一个静态方法,方法中使用ComboPooledDataSource对象重写的getConnection获取数据库连接对象Connection并返回
    * 4.创建一个静态方法,用于释放资源

    或者:
    * C3P0连接池工具类的创建步骤:
    * 1.在成员位置创建一个ComboPooledDataSource对象
    * 2.创建一个xml文件,名字必须叫c3p0-config.xml,放在src下边,里边的根元素和其它元素必须按照要求编写
    * C3PO连接池,会自动解析c3p0-config文件,给ComboPooledDataSource赋4大基本信息的值
    * 如果即使用了xml文件,有使用了静态代码块赋值,优先使用静态代码块
    * 3.创建一个静态方法,方法中使用ComboPooledDataSource对象重写的getConnection获取数据库连接对象Connection并返回
    * 4.创建一个静态方法,用于释放资源

    1.1创建DBCPUtils工具类(C3P0Utils);

    package cn.itcast.demo01.DBCPUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    public class C3P0Utils {
    //1.在成员位置创建一个ComboPooledDataSource对象
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
    //2.创建一个静态代码块(只执行一次,提高效率)(如果使用了xml文件,这步可以省略)
    static{
    try {
    //使用ComboPooledDataSource中的setXXX方法,设置数据库的4大基本信息
    //注册驱动,url,用户名,密码
    dataSource.setDriverClass("com.mysql.jdbc.Driver");
    dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/day05");
    dataSource.setUser("root");
    dataSource.setPassword("root");
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    
    //3.创建一个静态方法,方法中使用ComboPooledDataSource对象重写的getConnection获取数据库连接对象Connection并返回
    public static Connection getConnection(){
    try {
    //从连接池中获取数据库连接对象并返回
    return dataSource.getConnection();
    } catch (SQLException e) {
    e.printStackTrace();
    throw new RuntimeException("数据库连接失败!");
    }
    }
    
    //4.创建一个静态方法,用于释放资源
    public static void close(ResultSet rs,Statement stat,Connection conn){
    if(rs!=null){
    try {
    rs.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(stat!=null){
    try {
    stat.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(conn!=null){
    try {
    conn.close();//注意close方法不是把连接关闭,而是把连接归还给连接池
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    } 

    1.2测试C3P0连接池工具类

    package cn.itcast.demo02.test;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import cn.itcast.demo01.Utils.C3P0Utils;
    import cn.itcast.demo01.Utils.C3P0UtilsXML;
    
    /*
    * 测试C3P0连接池工具类
    */
    public class TestC3P0Utils {
    public static void main(String[] args) {
    test02();
    }
    
    private static void test02() {
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    try {
    //使用C3P0连接池工具类C3P0UtilsXML获取数据库连接对象
    conn = C3P0UtilsXML.getConnection();
    //System.out.println(conn);
    //获取执行者对象
    stat = conn.createStatement();
    //执行sql语句
    String sql = "SELECT * FROM category";
    rs = stat.executeQuery(sql);
    //处理结果集
    while(rs.next()){
    System.out.println(rs.getInt("cid")+"	"+rs.getString("cname"));
    }
    } catch (Exception e) {
    System.out.println(e);
    }finally {
    //释放资源 使用DBCP连接池工具类C3P0UtilsXML中的方法
    C3P0Utils.close(rs, stat, conn);
    }
    
    }
    
    private static void test01() {
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    try {
    //使用C3P0连接池工具类C3P0Utils获取数据库连接对象
    conn = C3P0Utils.getConnection();
    //System.out.println(conn);
    //获取执行者对象
    stat = conn.createStatement();
    //执行sql语句
    String sql = "SELECT * FROM category";
    rs = stat.executeQuery(sql);
    //处理结果集
    while(rs.next()){
    System.out.println(rs.getInt("cid")+"	"+rs.getString("cname"));
    }
    } catch (Exception e) {
    System.out.println(e);
    }finally {
    //释放资源 使用DBCP连接池工具类DBCPUtils中的方法
    C3P0Utils.close(rs, stat, conn);
    }
    
    }
    }

    2.DBCP连接池
    * 创建DBCP连接池的工具类:我们可以使用工具类获取数据库连接对象conn
    * 连接池的规范接口:javax.sql.DataSource 接口
    * 接口中的获取连接的方法:Connection getConnection() 尝试建立与此 DataSource 对象所表示的数据源的连接。
    *
    * DBCP连接池实现了连接池的规范接口DataSource,重写了接口中获取连接的方法 getConnection
    * org.apache.commons.dbcp.BasicDataSource
    *
    * DBCP连接池工具类的创建步骤:
    * 1.在成员位置创建一个BasicDataSource对象
    * 2.创建一个静态代码块(只执行一次,提高效率)
    * 使用BasicDataSource中的setXXX方法,设置数据库的4大基本信息
    * 注册驱动,url,用户名,密码
    * 3.创建一个静态方法,方法中使用BasicDataSource对象重写的getConnection获取数据库连接对象Connection并返回
    * 4.创建一个静态方法,用于释放资源
    或者:
    * DBCP连接池提供了一个工厂类
    * org.apache.commons.dbcp.BasicDataSourceFactory
    * 工厂类中提供了一个方法,用于创建BasicDataSource对象
    * public static DataSource createDataSource(Properties properties)
    *
    * 实现步骤:
    * 1.创建一个properties配置文件,使用键值对存储数据库的4大基本信息
    * 2.在成员位置创建一个DataSource变量
    * 3.创建一个静态代码块
    * a.使用Properties集合+IO流读取配置文件,把配置文件的键值对保存到集合中
    * b.使用连接池的工厂类BasicDataSourceFactory中的方法createDataSource,创建BasicDataSource连接池对象
    * createDataSource方法会自动的从Properties集合中读取键值对,给BasicDataSource对象赋值
    * 4.创建一个静态方法,用于返回数据库连接对象Connection
    * 5.创建一个静态方法,用于释放资源

    2.1创建DBCPUtils工具类(C3P0Utils);

    package cn.itcast.demo01.DBCPUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.apache.commons.dbcp.BasicDataSource;
    
    public class DBCPUtils {
    //1.在成员位置创建一个BasicDataSource对象
    private static BasicDataSource dataSource = new BasicDataSource();
    //2.创建一个静态代码块(只执行一次,提高效率)(如果使用了properties配置文件,这步可以省略)
    static{
    //使用BasicDataSource中的setXXX方法,设置数据库的4大基本信息
    //注册驱动,url,用户名,密码,必须设置
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/day05");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    //可选设置信息
    dataSource.setInitialSize(10);//初始化连接数量
    dataSource.setMaxActive(50);//最大连接数量
    }
    
    //3.创建一个静态方法,方法中使用BasicDataSource对象重写的getConnection获取数据库连接对象Connection并返回
    public static Connection getConnection(){
    try {
    return dataSource.getConnection();
    } catch (SQLException e) {
    e.printStackTrace();
    /*
    * 数据库连接对象,如果获取失败了,那么程序就没有必须继续执行
    * 把编译异常,转换为运行时异常
    */
    throw new RuntimeException("数据库连接失败!");
    }
    }
    
    //4.创建一个静态方法,用于释放资源
    public static void close(ResultSet rs,Statement stat,Connection conn){
    if(rs!=null){
    try {
    rs.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(stat!=null){
    try {
    stat.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(conn!=null){
    try {
    conn.close();//注意close方法不是把连接关闭,而是把连接归还给连接池
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }

    2.2 测试DBCP连接池工具类

    package cn.itcast.demo02.test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import cn.itcast.demo01.Utils.DBCPUtils;
    import cn.itcast.demo01.Utils.DBCPUtilsConfig;
    
    
    public class TestDBCPUtils {
    public static void main(String[] args) {
    test02();
    }
    
    /*
    * 测试DBCPUtilsConfig
    */
    private static void test02() {
    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;
    try {
    //使用DBCP连接池工具类DBCPUtilsConfig获取数据库连接对象
    conn = DBCPUtilsConfig.getConnection();
    //System.out.println(conn);
    //获取预编译的执行者对象
    String sql = "SELECT * FROM category WHERE cid IN (?,?,?)";
    pst = conn.prepareStatement(sql);
    //设置?占位符的实际参数
    pst.setObject(1, 1);
    pst.setObject(2, 2);
    pst.setObject(3, 5);
    //执行sql语句,获取结果集
    rs = pst.executeQuery();
    //处理结果集
    while(rs.next()){
    System.out.println(rs.getInt("cid")+"	"+rs.getString("cname"));
    }
    } catch (Exception e) {
    System.out.println(e);
    }finally {
    //释放资源
    DBCPUtilsConfig.close(rs, pst, conn);
    }
    }
    
    /*
    * 测试DBCPUtils
    */
    private static void test01() {
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    try {
    //使用DBCP连接池工具类DBCPUtils获取数据库连接对象
    conn = DBCPUtils.getConnection();
    //System.out.println(conn);
    //获取执行者对象
    stat = conn.createStatement();
    //执行sql语句
    String sql = "SELECT * FROM category";
    rs = stat.executeQuery(sql);
    //处理结果集
    while(rs.next()){
    System.out.println(rs.getInt("cid")+"	"+rs.getString("cname"));
    }
    } catch (Exception e) {
    System.out.println(e);
    }finally {
    //释放资源 使用DBCP连接池工具类DBCPUtils中的方法
    DBCPUtils.close(rs, stat, conn);
    }
    }
    
    }

    3.创建Javabean

    package cn.itcast.demo03.domain;
    
    import java.io.Serializable;
    
    /*
    * 创建数据库表category的javabean类
    * category表-->Category类
    * 表中的字段(cid,cname)-->类中的成员变量
    * 表中的行-->Category对象
    * 
    * javabean包含:
    * 1.私有的成员变量
    * 2.公共的get/set方法
    * 3.空参数构造方法
    * 4.toString方法
    * 5.实现序列化接口
    */
    public class Category implements Serializable {
    /**
    * 添加序列哈,防止序列化冲突异常
    */
    private static final long serialVersionUID = 1L;
    private int cid;
    private String cname;
    
    public Category() {
    super();
    }
    public Category(int cid, String cname) {
    super();
    this.cid = cid;
    this.cname = cname;
    }
    
     
    
    @Override
    public String toString() {
    return "Category [cid=" + cid + ", cname=" + cname + "]";
    }
    
    public int getCid() {
    return cid;
    }
    
    public void setCid(int cid) {
    this.cid = cid;
    }
    
    public String getCname() {
    return cname;
    }
    
    public void setCname(String cname) {
    this.cname = cname;
    }
    
    }
    人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
  • 相关阅读:
    bootstrap 网格系统学习
    在asp.net web api中利用过滤器设置输出缓存
    解决在开发环境中访问json配置文件时报HTTP 错误 404.3
    Newtonsoft.Json序列化和反序列
    装饰者模式学习
    SQL server跨库查询
    python-安装xlrd xlwt 插件
    vim 实际行跟屏幕行移动命令
    vim-缓存区中打开另外一个文件的方法
    vim 计算器寄存器使用
  • 原文地址:https://www.cnblogs.com/zennon/p/8370766.html
Copyright © 2011-2022 走看看