java JDBC数据库连接池技术(Druid ,c3p0)
1|0java JDBC 数据库连接池技术
2|0为什么使用数据库连接池?
这个原因与为什么使用线程池有点相似,都是为了提高资源的利用率,减少申请时间的浪费,提高程序的运行效率。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数
据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统
无尽的与数据库连接。
3|0数据库连接池的优点:
1.1 资源的重用
数据库连接池中的连接可以重复使用,避免频繁的创建,大大减少了性能的开销,即减少了系统的消耗,也增加了系统环境运行的平稳性
1.2 提高系统的反应速度
s 数据库连接池在初始化的过程中,往往已经创建了若干数据库连接置于连接池中备用,在由业务要使用的时候可以直接拿来使用,避免了初始化和释放过程的时间开销,从而减少了系统的响应时间
1.3 新的资源分配手段
当多个应用共用一个数据库的时候,可以在应用层通过数据库连接池的配置,实现某一应用最大数据库连接数的限制,避免某一应用占用过多的资源
1.4 统一连接管理,避免数据库的连接泄露
数据库连接池中可设置超时占用设定,强制收回被占用的连接,避免常规数据库连接操作中可能出现的资源泄露
4|0两种数据库连接池技术 C3P0 Druid
C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate 官方推荐使用
Druid 是阿里提供的数据库连接池,据说是集 DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有 BoneCP 快,据说是目前最吊的数据库连接池之一
5|0c3p0 的使用
*** 步骤:**
1. 导入 jar 包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
* 不要忘记导入数据库驱动 jar 包
2. 定义配置文件:
* 名称: c3p0.properties 或者 c3p0-config.xml
* 路径:直接将文件放在 src 目录下即可。
3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接: getConnection
配置文件:
java 代码
package JDBC;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class C3P0 {
public static void main(String[] args) throws SQLException {
// 创建数据库连接池
DataSource ds = new ComboPooledDataSource();
// 获取连接对象
Connection connection = ds.getConnection();
// 定义 sql 语句
String sql="update count set money=0";
// 获取 statement 对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 执行
int i = preparedStatement.executeUpdate();
System.out.println(i);
// 关闭 statement,归还 connection
preparedStatement.close();
connection.close();}
}
6|0Druid 的使用
1. 导入 jar 包
导入 jar 包 druid-1.0.9.jar
2. 定义配置文件
是 properties 形式的
可以叫任意名称,可以放在任意目录下
3. 加载配置文件
4. 获取数据库连接池对象
通过工厂来来获取 DruidDataSourceFactory
5. 获取连接
getConnection
配置文件
工具类
package JDBC;
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;
public class DruidUtils {
private static DataSource dataSource=null;
// 获取数据库连接池
public static DataSource getDataSource() {
return dataSource;
}
// 关闭 statement,归还 connection
public static void close(Statement statement, Connection connection){
if (statement!=null){
try {statement.close();
} catch (SQLException e) {e.printStackTrace();
}
}
if (connection!=null){
try {connection.close();
} catch (SQLException e) {e.printStackTrace();
}
}
}
public static void setDataSource(DataSource dataSource) {DruidUtils.dataSource = dataSource;}
static {
try {
// 加载配置文件经内存
Properties properties = new Properties();
InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(resourceAsStream);
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {System.out.println(e);
} catch (Exception e) {e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();}
}
主函数
7|0以上就是 jdbc 数据库连接池技术的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞关注,谢谢
EOF
本文链接:https://www.cnblogs.com/pjhaymy/p/13389524.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!