目录
一、C3P0连接池
1.C3P0连接池简介
2.常用的配置参数
3.C3P0连接池基本使用
(1)C3P0配置文件
(2)API介绍
4.使用步骤
二、DRUID连接池
1. DRUID简介
2.DRUID连接池基本使用
(1)API介绍
(2)使用步骤
(3)配置文件
(4)DataSourceUtils工具类
三、JdbcTemplate
1. JdbcTemplate概念
2. JdbcTemplate使用过程
3.JdbcTemplate实现增删改
(1)创建表
(2)插入数据
(3)更改数据
(4)删除数据
4.JdbcTemplate实现查询
(1)queryForObject查询数据返回整数
(2)queryForObject查询数据返回String
(3)queryForMap查询数据返回Map集合
(4)queryForList查询数据返回List集合
(5)query使用RowMapper做映射返回对象
(6)query使用BeanPropertyRowMapper做映射返回对象
C3P0地址:https://sourceforge.net/projects/c3p0/?source=navbar C3P0是一个开源的连接池。Hibernate框架,默认推荐使用C3P0作为连接池实现。 C3P0的jar包: c3p0-0.9.1.2.jar
jdbc:mysql://localhost:3306/mydb1
com.mysql.jdbc.Driver
root
123
3
10
2
10
jdbc:mysql://localhost:3306/mydb1
com.mysql.jdbc.Driver
root
123
3
10
2
10
com.mchange.v2.c3p0.ComboPooledDataSource 类表示C3P0的连接池对象,常用2种创建连接池的方式: 1.无参构造,使用默认配置, 2.有参构造,使用命名配置
public ComboPooledDataSource():无参构造使用默认配置
public ComboPooledDataSource():有参构造使用命名配置
public Connection getConnection() throws SQLException:从连接池中取出一个连接
1. 导入jar包c3p0-0.9.1.2.jar
2. 编写c3p0-config.xml 配置文件,配置对应参数
3. 将配置文件放在src目录下
4. 创建连接池对象ComboPooledDataSource ,使用默认配置或命名配置
5. 从连接池中获取连接对象
6. 使用连接对象操作数据库
7. 关闭资源
Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid地址:
https://github.com/alibaba/druid DRUID
连接池使用的jar包: druid-1.0.9.jar
com.alibaba.druid.pool.DruidDataSourceFactory 类有创建连接池的方法
public static DataSource createDataSource(Properties properties):创建一个连接池,连接池的参数使用properties中的数据
1. 在src目录下创建一个properties文件,并设置对应参数
2. 加载properties文件的内容到Properties对象中
3. 创建DRUID连接池,使用配置文件中的参数
4. 从DRUID连接池中取出连接
5. 执行SQL语句
6. 关闭资源
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/day25
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
minIdle=3
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DataSourceUtils {
// 1. 声明静态数据源成员变量
private static DataSource ds;
// 2. 创建连接池对象
static {
// 加载配置文件中的数据
InputStream is =
DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties");
Properties pp = new Properties();
try {
pp.load(is);
// 创建连接池,使用配置文件中的参数
ds = DruidDataSourceFactory.createDataSource(pp);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 3. 定义公有的得到数据源的方法
public static DataSource getDataSource() {
return ds;
}
// 4. 定义得到连接对象的方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 5.定义关闭资源的方法
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
// 6.重载关闭方法
public static void close(Connection conn, Statement stmt) {
close(conn, stmt, null);
}
}
JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
Spring源码地址:https://github.com/spring-projects/spring-framework
在JdbcTemplate中执行SQL语句的方法大致分为3类:
1. execute :可以执行所有SQL语句,一般用于执行DDL语句。
2. update :用于执行INSERT 、UPDATE 、DELETE 等DML语句。
3. queryXxx :用于DQL数据查询语句。
(1)准备DruidDataSource连接池或C3P0连接池
(2)导入依赖的jar包
(3)创建JdbcTemplate对象,传入连接池对象
(4)调用execute、update、queryXxx等方法
public static void main(String[] args) {
String sql = "CREATE TABLE product("
+ "pid INT PRIMARY KEY AUTO_INCREMENT,"
+ "pname VARCHAR(20),"
+ "price DOUBLE"
+ ");";
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
jdbcTemplate.execute(sql);
}
public static void main(String[] args) {
String sql = "INSERT INTO product VALUES (NULL, ?, ?);";
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
jdbcTemplate.update(sql, "iPhone3GS", 3333);
jdbcTemplate.update(sql, "iPhone4", 5000);
jdbcTemplate.update(sql, "iPhone4S", 5001);
jdbcTemplate.update(sql, "iPhone5", 5555);
jdbcTemplate.update(sql, "iPhone5C", 3888);
jdbcTemplate.update(sql, "iPhone5S", 5666);
jdbcTemplate.update(sql, "iPhone6", 6666);
jdbcTemplate.update(sql, "iPhone6S", 7000);
jdbcTemplate.update(sql, "iPhone6SP", 7777);
jdbcTemplate.update(sql, "iPhoneX", 8888);
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "UPDATE product SET pname=?, price=? WHERE pid=?;";
// String sql = "update pruduct set pname=?,price=? where pid=?;";
int i = jdbcTemplate.update(sql, "小米5s", 1999, 10);
System.out.println(i);
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "DELETE FROM product WHERE pid=?;";
int i = jdbcTemplate.update(sql, 7);
System.out.println(i);
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "SELECT price FROM product where pid=3;";
Integer integer = jdbcTemplate.queryForObject(sql, int.class);
System.out.println(integer);
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "SELECT pname FROM product where pid=1;";
String s = jdbcTemplate.queryForObject(sql, String.class);
System.out.println(s);
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "SELECT * FROM product where pid=?";
Map forMap = jdbcTemplate.queryForMap(sql,6);
Set> entries = forMap.entrySet();
for (Map.Entry entry : entries) {
System.out.println(entry.getKey() + "---" + entry.getValue());
}
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "SELECT * FROM product";
List
public class Product {
private int pid;
private String pname;
private double price;
@Override
public String toString() {
return "Pruduct{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", price=" + price +
'}';
}
public Product() {
}
public Product(int pid, String pname, double price) {
this.pid = pid;
this.pname = pname;
this.price = price;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from product";
List products = jdbcTemplate.query(sql, (resultSet, i) -> {
Product p = new Product();
p.setPid(resultSet.getInt("pid"));
p.setPname(resultSet.getString("pname"));
p.setPrice(resultSet.getDouble("price"));
return p;
});
for (Product product : products) {
System.out.println(product);
}
}
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from product";
List products = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Product.class));
for (Product product : products) {
System.out.println(product);
}
}