Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

 

使用步骤

一定要导入jar架包。要配置好文件,如果不配置文件,记得在程序中自行添加。

  1. 导入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar
  2. 定义配置文件:可以命名为druid-1.0.9.properties
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://MySQL地址/数据库名
    username=用户名
    password=密码
    initialSize=初始化连接数
    maxActive=最大连接数
    maxWait=最大等待时间(毫秒为单位)
  3. 加载配置文件druid-1.0.9.properties
  4. 获取连接池对象
  5. 获取数据库连接

举例如下:

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);
} }

运行程序,然后查询一下表记录:

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

最新文章

  1. 高质量C++/C编程指南(林锐)
  2. [全文检索]Lucene基础入门.
  3. mybatis执行批量更新batch update 的方法
  4. JS 获取浏览器窗口大小
  5. [转]Java总结篇系列:Java泛型
  6. Summary: Merge Sort of Array &amp;&amp; 求逆序对
  7. c 语言练习__求到N的阶乘的和。
  8. 【JSP动态网站】JDBC连接SqlServer 2008数据库
  9. FZU2181+poj2942(点双连通+判奇圈)
  10. Android多线程文件下载器
  11. (十)弹出框Alert与ActionSheet
  12. Django“少折腾”
  13. 应用调试(三)oops
  14. Variable used in lambda expression should be final or effectively final
  15. thinkphp安装不成功可能跟数据库名有关
  16. 【CSP】最大的矩形
  17. Android studio实现简单的CRUD
  18. FormatSQL
  19. PHP中的$_SERVER超全局变量
  20. Oracle数据库采用数据泵方式导入导出数据

热门文章

  1. 【重要】Pro Git 第二版 简体中文
  2. Java类成员之方法
  3. echarts圆饼图设置默认选中项并在中间显示文字
  4. rest实践3
  5. 序列积第m小元素 二分答案优化
  6. crawler 听课笔记 碎碎念 3 关于python的细枝末节的回顾复习
  7. pyton 封装
  8. 关于Error executing aapt的问题
  9. synchronized底层实现
  10. NIO&amp;AIO编程模型