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

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

连接池地通俗理解:

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

这里使用到四个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("数据添加失败");
}
}
}

Java学习笔记50(DBCP连接池)的更多相关文章

  1. 【JAVAWEB学习笔记】10_JDBC连接池&DBUtils

    使用连接池改造JDBC的工具类: 1.1.1          需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...

  2. java学习笔记41(数据库连接池 C3p0连接池)

    在之前的学习中,我们发现,我们需要频繁的创建连接对象,用完之后还需要在关闭资源,因为这些连接对象都是占资源的,但是又不得不创建,比较繁琐,为了解决这种情况,Java出现了数据库连接池: 数据库连接池的 ...

  3. Java学习笔记42(数据库连接池 druid连接池)

    druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...

  4. JDBC学习笔记——简单的连接池

    1.使用LinkedList保存连接                                                               即使是最简单的JDBC操作,也需要包含 ...

  5. Java学习笔记50:JSONObject与JSONArray的使用

    Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...

  6. Java学习笔记50:JSONObject与JSONArray的使用(转)

    Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...

  7. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  8. DBCP连接池配置(DBCPUtils.java)

    配置文件 db_dbcp.properites driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/db?useSSL= ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. Java中的反射总结

    反射是获取运行时类信息,即常量区中的Class信息. 要获取类信息,必然需要依据,不然系统怎么指定你要获取那个类信息, 类信息在java中就是Class类的一个对象,它是一个java类抽象,换句话说它 ...

  2. window.innerWidth和document.body.clientWidth的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 连续子数组最大和(python)

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  4. react组件回顶部

    在挂载更新里面判断滚动条的距离(滚动条不能overflow: auto 踩坑) componentDidMount(){ window.addEventListener('scroll' , ()=& ...

  5. 365. Water and Jug Problem量杯灌水问题

    [抄题]: 简而言之:只能对 杯子中全部的水/容量-杯子中全部的水进行操作 You are given two jugs with capacities x and y litres. There i ...

  6. node.js中使用yargs来处理命令行参数

    yargs库能够方便的处理命令行参数. 一.安装 yargs npm install yargs --save 二.读取命令行参数 const yargs = require('yargs'); le ...

  7. vba统计电脑计算机名和登陆的用户名

    Public Sub GetIPT() gipt = Trim(InputBox("请输入所在组,只需输入前面的字母代码即可 A- groupA B-groupB C-groupC D-gr ...

  8. MFC里面解析json文件格式

    CString strTemp; //CString ->string; string stringMsg = (LPCSTR)(CStringA)strTemp; //string -> ...

  9. boost asio 学习(四)使用strand将任务排序

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=5 4. Seri ...

  10. poj3304(是否存在一条直线与所有给出线段相交

    题意:给出n条线段,问你是否存在一条直线让他与所有线段相交. 思路:枚举两条直线的起点和终点做一条直线,看他是否与所有线段相交. #include<cstdio> #include< ...