数据库连接池
1.数据库连接池:
*概念:其实就是一个容器(集合),存放数据库连接的容器
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
*好处:
1.节约资源
2.用户访问高效
*实现:
1.标准接口:DataSource (javax.sql 包下的)
1.方法:
*获取链接:getConnection()
*归还链接:如果链接对象Connection是从连接池中获取的,那么调用Connection.close(),则不会关闭连接,而是归还链接。
2.一般我们不去实现它,有数据库厂商来实现
1.C3p0:数据库连接池技术(这个没用过,用的都是下面那个)
2.Druid:数据库连接池实现技术,由阿里巴巴提供的
*步骤
1.导入jar包(jar包的下载地址https://repo1.maven.org/maven2/com/alibaba/druid/)
2.配置文件druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名
username=root
password=密码
#初始化连接数量
initialSize=5
#最大链接数
maxActive=10
#最大等待时间
maxWait=3000
3.获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
4.获取链接:getConnection
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Date;
import java.util.Properties;
public class Druid {
public static void main(String[] args) throws Exception {
//加载配置文件
Properties properties = new Properties();
InputStream is = Druid.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获取链接
Connection coon = dataSource.getConnection();
System.out.println(coon);
}
}
*定义一个工具类:
1.定义一个类 JDBCUtils
2.提供静态代码块加载文件,初始化链接池对象
3.提供方法:
1.获取链接方式:通过数据库连接池获取链接
2.释放资源
3.获取链接池的方法:
package Utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//定义一个成员变量 DataSource
private static DataSource ds;
static {
try {
Properties properties =new Properties();
properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
ds = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void close(Statement statement,Connection connection) throws SQLException {
statement.close();
connection.close();
}
public static void close(ResultSet resultSet, Statement statement, Connection connection) throws SQLException {
statement.close();
connection.close();
resultSet.close();
}
public static DataSource getDataSource() {
return ds;
}
}