数据库连接池 —— Druid的简单使用
Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。
使用步骤
一定要导入jar架包。要配置好文件,如果不配置文件,记得在程序中自行添加。
- 导入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar
- 定义配置文件:可以命名为druid-1.0.9.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://MySQL地址/数据库名
username=用户名
password=密码
initialSize=初始化连接数
maxActive=最大连接数
maxWait=最大等待时间(毫秒为单位) - 加载配置文件druid-1.0.9.properties
- 获取连接池对象
- 获取数据库连接
举例如下:
package my.view.datasource.druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties; public class DruidDemo { public static void main(String[] args) throws Exception {
// 获取加载配置文件的对象
Properties properties = new Properties(); // 获取类的类加载器
ClassLoader classLoader = DruidDemo.class.getClassLoader(); // 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 加载配置文件
properties.load(resourceAsStream); // 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); // 获取数据库连接对象
Connection connection = dataSource.getConnection(); // 打印获取到的数据库连接对象地址值
System.out.println(connection);
} }
定义一个创建数据库连接池对象的类
在使用数据库连接池的时候,我们不可能说每次都如上例中的情况自己写一遍吧。我们可以自定义一个工具类,用来创建数据库连接池对象,这个时候,我们乳沟想要创建数据库连接池对象,直接调用该工具类即可。
创建工具类实例
定义获取数据库连接池对象的方法
/**
* 数据库连接对象
*/
private static DataSource dataSource; /*
获取数据库连接池对象
*/
static { try {
// 获取加载配置文件的对象
Properties properties = new Properties();
// 获取类的类加载器
ClassLoader classLoader = JdbcUtils.class.getClassLoader();
// 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
// 加载配置文件
properties.load(resourceAsStream);
// 获取连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
} } /**
* 获取连接池对象
*/
public static DataSource getDataSource() {
return dataSource;
}
定义获取数据库连接对象的方法
/**
* 获取数据库连接对象
*/
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}
定义释放资源的方法
/**
* 归还连接
* @param t 要被归还到熟即可连接池对象的数据库连接对象
* @param <T> 数据库连接对象的类型
*/
public static <T> void releaseResources (T t){
if(t != null){
try {
// 利用反射,获取class对象
Class<?> aClass = t.getClass();
// 获取class对象中的方法对象
Method close = aClass.getMethod("close");
// 执行方法
close.invoke(t);
} catch (Exception e) {
e.printStackTrace();
}
}
}
该工具类总的代码:
package my.view.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Properties; public class JdbcUtils { /**
* 数据库连接对象
*/
private static DataSource dataSource; /*
获取数据库连接池对象
*/
static { try {
// 获取加载配置文件的对象
Properties properties = new Properties();
// 获取类的类加载器
ClassLoader classLoader = JdbcUtils.class.getClassLoader();
// 获取druid-1.0.9.properties配置文件资源输入流
InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
// 加载配置文件
properties.load(resourceAsStream);
// 获取连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
} } /**
* 获取连接池对象
*/
public static DataSource getDataSource() {
return dataSource;
} /**
* 获取数据库连接对象
*/
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
} /**
* 归还连接
* @param t 要被归还到熟即可连接池对象的数据库连接对象
* @param <T> 数据库连接对象的类型
*/
public static <T> void releaseResources (T t){
if(t != null){
try {
// 利用反射,获取class对象
Class<?> aClass = t.getClass();
// 获取class对象中的方法对象
Method close = aClass.getMethod("close");
// 执行方法
close.invoke(t);
} catch (Exception e) {
e.printStackTrace();
}
}
} }
使用上面创建个工具类实例
有如下一个数据表格
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT, -- id
NAME VARCHAR(10), -- 名字
balance DOUBLE -- 余额
); INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);
向该表格中插入一条数据,实现如下:
package my.view.datasource.druid; import my.view.utils.JdbcUtils; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement; public class JdbcUtilsDemo { public static void main(String[] args) throws Exception{ // 获取数据库连接池对象
DataSource dataSource = JdbcUtils.getDataSource(); // 从数据库连接池对象中获取数据库连接对象
Connection connection = dataSource.getConnection(); // 预定义定义SQL语句
String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);"; // 获取执行预定义SQL语句对象
PreparedStatement preparedStatement = connection.prepareStatement(sql); // 给?赋值
preparedStatement.setString(1, "WanWu");
preparedStatement.setInt(2, 2000); // 执行预编译好的SQL语句
preparedStatement.executeUpdate(); // 释放资源:PreparedStatement
JdbcUtils.releaseResources(preparedStatement); // 归还连接
JdbcUtils.releaseResources(connection); // 释放资源:数据库连接池
JdbcUtils.releaseResources(dataSource);
} }
运行程序,然后查询一下表记录:

可以看到插入了一条数据,说明测试成功。

数据库连接池 —— Druid的简单使用的更多相关文章
- 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...
- 数据库连接池druid
推荐一个带监控的数据库连接池druid,阿里的,据说比c3p0连接池性能要好点,主要是带sql,spring,uri等访问监控,比较直观地址: https://github.com/alibaba/d ...
- Druid数据库连接池两种简单使用方式
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部 ...
- Druid数据库连接池就这么简单
前言 本章节主要讲解Druid数据库连接池,为什么要学Druid数据库连接池呢?? 我的知识储备数据库连接池有两种->C3P0,DBCP,可是现在看起来并不够用阿~当时学习C3P0的时候,觉得这 ...
- [转]阿里巴巴数据库连接池 druid配置详解
一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...
- 阿里巴巴数据库连接池 druid配置详解
一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...
- spring配置数据库连接池druid
连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完毕后,用户也并非将连 ...
- Spring Boot 数据库连接池 Druid
简介 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问 ...
- 数据库连接池——Druid
使用步骤: 1.导包,durid1.0.9 jar包 2.定义配置文件,properties文件,名字任意位置也任意, 3.加载文件 4.获得数据库连接池对象 通过DuridDataSourceFa ...
随机推荐
- matlab读取excel文件中的数据
1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...
- 前端页面表格排序 jQuery Table 基础
通常来说, 排序的方式有两种, 一种是我们在查询的时候就排好序,然后将数据渲染到前台页面上, 但是这样做有个弊端,就是在争对做好了缓存处理的系统, 在查询相同数据的时候进行排序,可能不能成功, 因为进 ...
- 【Java基础总结】总结
总想着把学习的过程全都记录下来 以便某一时刻回头的时候,还能看见走过的路 对于基础来说,即使不回头看,也知道这条路是什么样子的 记录不记录,都无所谓 况且我不是专业的记录者,不记录比记录好 实在想不起 ...
- .Net Core使用分布式缓存Redis:Lua脚本
一.前言 运行环境window,redis版本3.2.1.此处暂不对Lua进行详细讲解,只从Redis的方面讲解. 二.Redis的Lua脚本 在Redis的2.6版本推出了脚本功能,允许开发者使用L ...
- ReactNative: 自定义ReactNative API组件
一.简介 在前面介绍了很多ReactNative中UI组件和API组件,这些都是Facebook团队封装好的基础组件,开发者可以直接使用.然而,在实际的开发过程中,面对复杂的需求,此时原生的Nativ ...
- dp - 3维背包(东四省)
题意: 给你 n 张卡片,总共可以消耗的法力值,求最多可以造成多少伤害, 卡片分为2种,一种是魔法卡,使用后可以使所有的连环卡的费用全部减1,另一种是连环卡,因魔法卡的使用可以使其费用减1,问最终最多 ...
- java架构之路(多线程)JUC并发编程之Semaphore信号量、CountDownLatch、CyclicBarrier栅栏、Executors线程池
上期回顾: 上次博客我们主要说了我们juc并发包下面的ReetrantLock的一些简单使用和底层的原理,是如何实现公平锁.非公平锁的.内部的双向链表到底是什么意思,prev和next到底是什么,为什 ...
- Window同一电脑配置多个git公钥
前言 配置多个本地ssh-key之前,先初始化下GIt环境哦! 可以参照:https://www.cnblogs.com/poloyy/p/12185132.html 执行前两步就好啦 本地生成两个s ...
- 真机调试报The executable was signed with invalid entitlements.错误
真机运行时,提示The executable was signed with invalid entitlements.(The entitlements specified in your appl ...
- 从0开发3D引擎:目录
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.优秀的性能.最小功能集合(MVP)" 的3D引擎. 本系列的素材来 ...