什么是连接池:
存放由一定数量的连接对象。以便重复利用这个连接对象
为什么要使用连接池?
由于建立数据库连接是一种非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中。
下边介绍常用的三种连接池
DBCP
DBCP由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开
方法1(不推荐)
第一种方式硬编码的方式,就是将连接参数写在代码里面:
第一步:导入jar包
第二步:依赖
public class MyDemo {
public static void main(String[] args) throws Exception {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUsername("root");
ds.setPassword("root");
//ds.setMaxWait(5000);
//获取连接对象
Connection conn = ds.getConnection();
//获取操作对象
PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
}
//释放资源
conn.close();
resultSet.close();
preparedStatement.close();
}
}
}
方法2(推荐使用):
通过采用配置文件的方式,推荐使用
第一步:导入jar包
第二步:依赖
第三步:建立dbcp.properties配置文件
public class MyTest2 {
public static void main(String[] args) throws Exception {
//采用配置文件的方式,来使用DBCP
//创建 一个工厂
Properties properties = new Properties();
properties.load(new FileReader("src/dbcp.properties"));
DataSource ds = new BasicDataSourceFactory().createDataSource(properties);
Connection connection = ds.getConnection();
//获取连接对象
Connection conn = ds.getConnection();
//获取操作对象
PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
}
//释放资源
conn.close();
resultSet.close();
preparedStatement.close();
}
}
C3P0
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,目前使用它的开源项目有Hibernate、Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
方法1(不推荐)
第一种方式硬编码的方式,就是将连接参数写在代码里面:
第一步:导入jar包
第二步:依赖
public class C3p0Demo {
public static void main(String[] args) throws PropertyVetoException, SQLException {
硬编码,将数据库的参数,用代码来设置
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUser("root");
ds.setPassword("123456");
Connection conn = ds.getConnection();
//获取操作对象
PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
}
//释放资源
conn.close();
resultSet.close();
preparedStatement.close();
}
}
方式2:(推荐):
通过采用配置文件的方式,推荐使用
第一步:导入jar包
第二步:依赖
第三步:建立dbcp.properties配置文件
public class C3p0Demo2 {
public static void main(String[] args) throws SQLException {
//采用配置文件的方式,来使用C3p0
//C3p0 对配置文件由以下要求,1.配置文件的名称固定的 2.配置文件必须放到src下
//如果要使用xml配置文件中的第二配置,那么就把第二配置的名称传过来
ComboPooledDataSource ds = new ComboPooledDataSource("MyConfig");
//获取连接对象
Connection conn = ds.getConnection();
//获取操作对象
PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
}
//释放资源
conn.close();
resultSet.close();
preparedStatement.close();
}
}
Druid(阿里德鲁伊地表最强)
方法1(不推荐)
第一种方式硬编码的方式,就是将连接参数写在代码里面:
第一步:导入jar包
第二步:依赖
public class DriudDemo {
public static void main(String[] args) throws Exception {
//创建数据源
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///mydb");
ds.setUsername("root");
ds.setPassword("123456");
//获取连接对象
DruidPooledConnection connection = ds.getConnection();
System.out.println(connection);
//获取操作对象
//connection.prepareStatement("");
}
方式2:(推荐):
通过采用配置文件的方式,推荐使用
第一步:导入jar包
第二步:依赖
第三步:建立dbcp.properties配置文件
public class DriudDemo {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.load(new FileReader("src/druid.properties"));
//通过一个工厂类,创建一个数据源
DataSource ds =new DruidDataSourceFactory().createDataSource(properties);
Connection connection = ds.getConnection();
System.out.println(connection);
//获取操作对象
PreparedStatement preparedStatement = connection.prepareStatement("");
}