标签:使用 c3p0 连接池 mysql catch 连接 conn
在Java中使用的主流连接池包括C3P0、BONCP、DBCP、Proxool…,最多人用的是C3P0,因为除了不提供连接池监控,配置简单,持续运行的稳定性很不错
为什么使用连接池
在开发中, 频繁的开关连接是一件非常消耗资源和时间的操作, 会导致程序执行的效率非常的低下,创建连接要花的时时间一般比对数据库的数据增删改查的时间还要长! 因此我们可以在程序中创建容器(连接池), 在程序启动时就初始化一批连接放在连接池中, 当用户需要时,就从连接池中获取一个连接, 用完连接之后再将连接还回连接池中, 这样就可以实现连接的复用, 减少连接开关的次数, 提高程序执行的效率!!
连接池的使用及创建步骤:
1,导入jar包c3p0,以及mysql连接驱动
<!-- MySQL驱动 -->
<!-- mysql-connector-java-5.1.43-bin.jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
<!-- mchange C3P0 数据源 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5-pre2</version>
</dependency>
2,编写property配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/XXX</property>
<property name="user">XXX</property>
<property name="password">XXX</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<!--自定义配置增加键name 提供多选择 -->
<named-config name="awcDB">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/XXX</property>
<property name="user">XXX</property>
<property name="password">XXX</property>
<property name="initialPoolSize">10</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
3, 编写c3p0工具类 c3p0Util
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class c3p0Util {
// 这里不传入参数则会使用默认配置
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("awcDB");
// 返回一个dataSource连接
public static ComboPooledDataSource getDataSource(){
return dataSource;
}
// 返回一个Connection连接
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
}
/**
* 释放资源
* @param conn
* @param pstmt
* @param rs
*/
public static void release(Connection conn, Statement pstmt, ResultSet rs){
// 关闭数据库连接对象
if(conn!=null){
try {
if(!conn.isClosed()){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 关闭数据库操作对象
if (pstmt!=null) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭结果集对象
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4,使用
private void warehousing(Data data) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1,使用c3p0连接池
conn = c3p0Util.getConnection();
// 2,获取数据库操作对象
stmt = conn.createStatement();
// 3,改为手动提交
conn.setAutoCommit(false);
String sqlcunru = "insert into keynote2"
+ " (name,count,deal"
+ ",createTime,price) values ('"+data.getName()+"','"+data.getCount()+"','"+data.getDeal()+"','"+data.getCreateTime()+"','"+data.getPrice()+"')";
// 4,得到结果集
stmt.execute(sqlcunru);
// 5,提交
conn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6,关闭对象,回收数据库资源
c3p0Util.release(conn, stmt, rs);
}
}
标签:使用,c3p0,连接池,mysql,catch,连接,conn 来源: https://blog.csdn.net/weixin_41558061/article/details/100581443
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。