Java学习笔记50(DBCP连接池)

2018-06-18 03:44:11来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

实际开发中,连接数据库是十分消耗资源的操作,但是,我们又需要频繁地连接数据库

这时候,为了提高效率,这里就会采用连接池技术:

 

连接池地通俗理解:

一个池里面放入很多的连接,需要哪一个取出来用即可,用完放回去,而不是关闭连接

这里使用到四个jar包

commons-dbcp-1.4.jar

commons-pool-1.5.6.jar

mysql-connector-java-5.1.37-bin.jar

commons-dbutils-1.6.jar

 

DataSource接口:连接池的规范接口

BasicDataSource类:导入的jar包中的实现类

连接池连接数据库的方法与配置:

package demo;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;

public class DataSourceDemo {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        // 常规基本配置
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
        dataSource.setUsername("root");
        dataSource.setPassword("xuyiqing");
        // 连接池配置
        dataSource.setMaxActive(10);// 最大连接数
        dataSource.setMaxIdle(5);// 最大空闲连接
        dataSource.setMinIdle(2);// 最小空闲连接
        dataSource.setInitialSize(5);// 初始化连接
        try {
            Connection con = dataSource.getConnection();
        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("数据库连接失败");
        }
    }
}

 

接下来创建一个连接池的工具类,用于方便开发:

数据准备:创建表:

CREATE TABLE sort(
  sid INT PRIMARY KEY AUTO_INCREMENT,
  sname VARCHAR(100),
  sprice DOUBLE,
  sdesc VARCHAR(5000)
);

工具类:

package demo;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class JDBCUtils {
    private static BasicDataSource dataSource = new BasicDataSource();

    static {
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
        dataSource.setUsername("root");
        dataSource.setPassword("xuyiqing");
        dataSource.setInitialSize(10);
        dataSource.setMaxActive(8);
        dataSource.setMaxIdle(5);
        dataSource.setMinIdle(1);
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
}

测试:

package demo;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;

public class QueryRunnerDemo {
    private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    public static void main(String[] args) {
        insert();
    }

    public static void insert() {
        String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
        Object[] params = { "水果", 20, "促销" };
        try {
            qr.update(sql, params);
        } catch (SQLException ex) {
            throw new RuntimeException("数据添加失败");
        }
    }

    public static void select() {
        String sql = "SELECT * FROM sort";
        try {
            List<Object[]> list = qr.query(sql, new ArrayListHandler());
            for (Object[] objs : list) {
                for (Object obj : objs) {
                    System.out.println(obj + "\t");
                }
            }
        } catch (SQLException ex) {
            throw new RuntimeException("数据添加失败");
        }
    }
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Topics

下一篇:细思极恐-你真的会写java吗?