Druid连接池基础使用
建立数据库连接耗时耗费资源,一个数据库服务器能够同时建立的连接数也是有限的,在大型的Web应用中,可能同时会有成百上千的访问数据库的请求,如果Web应用程序为每一个客户请求分配一个数据库连接,将导致性能的急剧下降。
数据库连接池的意义在于,能够重复利用数据库连接(有点类似线程池的部分意义),提高对请求的响应时间和服务器的性能。
连接池中提前预先建立了多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,直接从池中取出一个连接对象为客户服务,当请求完成之后,客户程序调用close()方法,将连接对象放回池中。
druid为阿里巴巴的数据源,(数据库连接池),集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况。
DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource。
import JDBCdemo1.JDBCUtils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
/*
开源连接池Druid的使用
*/
public class demo01 {
/*
Druid的使用:
手动设置参数
*/
public static void main1(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//使用连接池
DruidDataSource dataSource = new DruidDataSource();
//手动设置参数
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://192.168.4.192:3306/wdp-database");
dataSource.setUsername("root");
dataSource.setPassword("root");
//获得连接
conn = dataSource.getConnection();
//获得连接
//conn = JDBCUtils.getConnection();
//编写SQL
String sql = "Select * from student";
//预编译sql
pstmt = conn.prepareStatement(sql);
//设置参数
//执行sql
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name") + " " + rs.getString("sex"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, pstmt, conn);
}
}
/*
Druid的使用:
配置方式设置参数
Druid配置方式可以使用属性文件配置
文件名称没有规定但是属性文件中的key要一定
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//使用连接池
//从属性文件中获取
Properties properties = new Properties();
properties.load(new FileInputStream("src/db.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获得连接
//conn = JDBCUtils.getConnection();
conn = dataSource.getConnection();
//编写SQL
String sql = "Select * from student";
//预编译sql
pstmt = conn.prepareStatement(sql);
//设置参数
//执行sql
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name") + " " + rs.getString("sex"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, pstmt, conn);
}
}
}
配置文件:db.properties
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://192.168.4.192:3306/wdp-database
username=root
password= root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000