前言
在使用了c3p0之后感觉还不错,但是用着这东西我却找不到一丝的归属感,当我还在迷茫的时候,就遇见了druid.这个是阿里巴巴的数据库连接池---德鲁伊,听着就高大上,似乎是有点神秘的牙子.不多说了,
开搞
1.最重要的还是导包

2.编写druid.properties配置文件
url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true
#这个可以缺省的,会根据url自动识别
driverClassName=com.mysql.cj.jdbc.Driver
username=用户名
password=密码
##初始连接数,默认0
initialSize=10
#最大连接数,默认8
maxActive=30
#最小闲置数
minIdle=10
#获取连接的最大等待时间,单位毫秒
maxWait=2000
#缓存PreparedStatement,默认false
poolPreparedStatements=true
#缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句设置
maxOpenPreparedStatements=20
3.获取连接
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class Conn {
public static Connection getConnection() {
Connection connection = null;
try {
// 数据源配置
Properties properties = new Properties();
// 通过当前类的class对象获取资源文件
InputStream is = Conn.class.getClassLoader().getResourceAsStream("druid.properties");
System.out.println(is);
properties.load(is);
// 返回的是DataSource,不是DruidDataSource
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(connection);
return connection;
}
public static DataSource getConnection2() {
try {
// 数据源配置
Properties properties = new Properties();
// 通过当前类的class对象获取资源文件
InputStream is = Conn.class.getClassLoader().getResourceAsStream("druid.properties");
System.out.println(is);
properties.load(is);
// 返回的是DataSource,不是DruidDataSource
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
return dataSource;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
4.和dbutils配合使用最爽了
/*获取连接*/
import java.sql.Connection;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import org.vector.domain.Student;
public class DruildTest {
private Connection conn = Conn.getConnection();
// 创建语句执行者
private QueryRunner qr = new QueryRunner();
@Test
public void findAll() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<Student> query = qr.query(conn, sql, new BeanListHandler<Student>(Student.class));// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Student student : query) {
System.out.println(student);
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findColumnListHandler() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<String> query = qr.query(conn, sql, new ColumnListHandler<String>("sname"));// 查询所有就要封装进BeanListHandler
// 执行SQL
for (String string : query) {
System.out.println(string);
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findArrayListHandler() {
try {
String sql = "select * from student";
// 设置参数
List<Object[]> query = qr.query(conn, sql, new ArrayListHandler());// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object[] string : query) {
System.out.println(string.toString());
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findArrayHandler() {
try {
// 编写SQL
String sql = "select * from student where sid = ?";
// 设置参数
Object[] query = qr.query(conn, sql, new ArrayHandler(), 6);// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object string : query) {
System.out.println(string.toString());
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findCount() {
try {
// 编写SQL
String sql = "select count(*) from student";
// 设置参数
Long query = qr.query(conn, sql, new ScalarHandler<Long>());// 查询所有就要封装进BeanListHandler
// 执行SQL
System.out.println(query);
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findMapListHanlder() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<Map<String, Object>> query = qr.query(conn, sql, new MapListHandler());// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Map<String, Object> map : query) {
for (Object object : map.keySet()) {
System.out.println(map.get(object));
}
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findMapHanlder() {
try {
// 编写SQL
String sql = "select * from student where sid = ?";
// 设置参数
Map<String, Object> query = qr.query(conn, sql, new MapHandler(), 6);// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object object : query.keySet()) {
System.out.println(query.get(object));
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findOne() {
try {
// 编写SQL
String sql = "select * from student where sid = ? ";
// 设置参数
Student query = qr.query(conn, sql, new BeanHandler<Student>(Student.class), 4);// 查询所有就要封装进BeanListHandler
// 执行SQL
System.out.println(query);
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void insert() {
try {
// 编写SQL
String sql = "insert into student (sname,sex,classes) values (?,?,?)";
// 设置参数
String sname = "sname";
String sex = "1";
int classes = 12346;
// 执行SQL
int update = qr.update(conn, sql, sname, sex, classes);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void delete() {
try {
// 编写SQL
String sql = "delete from student where sname = ?";
// 设置参数
String sname = "sname";
// 执行SQL
int update = qr.update(conn, sql, sname);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void update() {
try {
// 编写SQL
String sql = "update student set sname = ? ,sex = ? , age = ? ,snumber = ? where sid = ?";
// 设置参数
int sid = 32;
String sname = "三生三世";
String sex = "妖";
int age = 258;
int classes = 121;
String snumber = "15457884";
// 执行SQL
int update = qr.update(conn, sql, sname, sex, age, snumber, sid);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.另一种
/*获取连接池*/
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import org.vector.domain.Student;
public class DruildTest2 {
// 创建语句执行者
private QueryRunner qr = new QueryRunner(Conn.getConnection2());
@Test
public void findAll() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<Student> query = qr.query(sql, new BeanListHandler<Student>(Student.class));// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Student student : query) {
System.out.println(student);
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findColumnListHandler() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<String> query = qr.query(sql, new ColumnListHandler<String>("sname"));// 查询所有就要封装进BeanListHandler
// 执行SQL
for (String string : query) {
System.out.println(string);
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findArrayListHandler() {
try {
String sql = "select * from student";
// 设置参数
List<Object[]> query = qr.query(sql, new ArrayListHandler());// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object[] string : query) {
System.out.println(string.toString());
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findArrayHandler() {
try {
// 编写SQL
String sql = "select * from student where sid = ?";
// 设置参数
Object[] query = qr.query(sql, new ArrayHandler(), 6);// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object string : query) {
System.out.println(string.toString());
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findCount() {
try {
// 编写SQL
String sql = "select count(*) from student";
// 设置参数
Long query = qr.query(sql, new ScalarHandler<Long>());// 查询所有就要封装进BeanListHandler
// 执行SQL
System.out.println(query);
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findMapListHanlder() {
try {
// 编写SQL
String sql = "select * from student";
// 设置参数
List<Map<String, Object>> query = qr.query(sql, new MapListHandler());// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Map<String, Object> map : query) {
for (Object object : map.keySet()) {
System.out.println(map.get(object));
}
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findMapHanlder() {
try {
// 编写SQL
String sql = "select * from student where sid = ?";
// 设置参数
Map<String, Object> query = qr.query(sql, new MapHandler(), 6);// 查询所有就要封装进BeanListHandler
// 执行SQL
for (Object object : query.keySet()) {
System.out.println(query.get(object));
}
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void findOne() {
try {
// 编写SQL
String sql = "select * from student where sid = ? ";
// 设置参数
Student query = qr.query(sql, new BeanHandler<Student>(Student.class), 4);// 查询所有就要封装进BeanListHandler
// 执行SQL
System.out.println(query);
// 处理结果
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void insert() {
try {
// 编写SQL
String sql = "insert into student (sname,sex,classes) values (?,?,?)";
// 设置参数
String sname = "sname";
String sex = "1";
int classes = 12346;
// 执行SQL
int update = qr.update(sql, sname, sex, classes);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void delete() {
try {
// 编写SQL
String sql = "delete from student where sname = ?";
// 设置参数
String sname = "sname";
// 执行SQL
int update = qr.update(sql, sname);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void update() {
try {
// 编写SQL
String sql = "update student set sname = ? ,sex = ? , age = ? ,snumber = ? where sid = ?";
// 设置参数
int sid = 32;
String sname = "三生三世";
String sex = "妖";
int age = 258;
int classes = 121;
String snumber = "15457884";
// 执行SQL
int update = qr.update(sql, sname, sex, age, snumber, sid);
// 处理结果
System.out.println(update);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:用java代码配置连接方式(个人不推荐,比较不好维护,也不直观,未优化)
import java.sql.Connection;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
public class Conn {
public static Connection getConnection() {
Connection connection = null;
try {
// 数据源配置
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(
"jdbc:mysql://localhost:3306/students?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 这个可以缺省的,会根据url自动识别
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 下面都是可选的配置
dataSource.setInitialSize(10); // 初始连接数,默认0
dataSource.setMaxActive(30); // 最大连接数,默认8
dataSource.setMinIdle(10); // 最小闲置数
dataSource.setMaxWait(2000); // 获取连接的最大等待时间,单位毫秒
dataSource.setPoolPreparedStatements(true); // 缓存PreparedStatement,默认false
dataSource.setMaxOpenPreparedStatements(20); // 缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句代码
// 获取连接
connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public static DataSource getConnection2() {
try {
// 数据源配置
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(
"jdbc:mysql://localhost:3306/students?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 这个可以缺省的,会根据url自动识别
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 下面都是可选的配置
dataSource.setInitialSize(10); // 初始连接数,默认0
dataSource.setMaxActive(30); // 最大连接数,默认8
dataSource.setMinIdle(10); // 最小闲置数
dataSource.setMaxWait(2000); // 获取连接的最大等待时间,单位毫秒
dataSource.setPoolPreparedStatements(true); // 缓存PreparedStatement,默认false
dataSource.setMaxOpenPreparedStatements(20); // 缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句代码
// 获取连接
return dataSource;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
演示的代码
/*和用配置文件的基本一样*/
网友评论