Druid:数据库连接池技术
-
Druid :数据库连接池实现技术,由阿里巴巴提供的
-
步骤∶
-
1.导入jar包druid-1.0.9.jar
-
2.定义配配置文件:
- 是properties形式的
- 可以叫任意名称,可以放在任意目录下(也就是不会自动加载,必须手动加载)
-
3.手动加载配置文件。使用(Properties集合)
Properties pro = new Properties(); InputStream ras = Demo10.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(ras);
-
4.获取数据库连接池对象∶通过工厂类来获取DruidDataSourceFactory
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
-
5.获取连接∶getConnection()
Connection connection = dataSource.getConnection();
-
-
配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db4
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
示例
package com.ningxiao.day17;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
/*
author :wt
@create 2020-08-27 15:28
*/
public class Demo10 {
public static void main(String[] args) throws Exception {
//1. 导入druid-1.0.9.jar包
//2. 设置配置文件
Properties pro = new Properties();
InputStream ras = Demo10.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(ras);
//3. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
//4. 创建连接对象
Connection connection = dataSource.getConnection();
String sql = "select * from account";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double balance = rs.getDouble("balance");
System.out.println(id+":"+name+":"+balance);
}
//断开连接对象,将连接对象归还给数据库连接池
connection.close();
}
}
6. Druid工具类
- 定义工具类
- 1.定义一个类JDBCUtils
- 2.提供静态代码块加载配置文件,初始化连接池对象
- 3.提供方法
- 1.获取连接方法∶通过数据库连接池获取连接
- 2.释放资源
- 3,获取连接池的方法
示例
package com.ningxiao.day18;
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.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
author :wt
@create 2020-08-27 16:37
*/
public class JDBCUtils {
private static DataSource ds;
//静态代码块加载配置文件,初始化连接池对象
static {
Properties pro = new Properties();
InputStream rs = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
pro.load(rs);
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//创建连接对象
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//关闭连接对象
public static void close(Connection conn, Statement stmt){
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//Demo
package com.ningxiao.day18;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
author :wt
@create 2020-08-27 16:44
*/
public class Demo01 {
public static void main(String[] args) {
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
connection = JDBCUtils.getConnection();
String sql = "select * from account";
ps = connection.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double balance = rs.getDouble("balance");
System.out.println(id+":"+name+":"+balance);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(connection,ps);
}
}
}