c3p0连接池 java demo_C3P0连接池的使用

C3P0连接池的使用

c3p0连接池的概念

C3P0是一个开源的JDBC连接池,实现了数据源的链接,支持JDBC3规范和实现JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。

使用c3p0的作用

首先之前使用JDBC操作了数据库,一般的代码步骤分为:加载驱动、建立链接、创建语句、执行语句、关闭资源等操作,其中的步骤建立连接,每一次操作数据库的时候,都需要获取Connection进行连接,当数据库操作不是很频繁的时候,没有影响,但是如果并发量较高,同时大量的线程需要连接数据库的时候,那么连接的创建将会显得耗时和耗费空间,创建的初始化需要一定的时间,这在一定程度上会影响代码的性能。

所以为了应对以上的情况,C3P0将在连接池中先创建一些连接Connection,等线程需要使用连接的时候直接获取即可,缩短了创建链接的时间,并且在使用完成之后释放到连接池中,而不会真正的关闭资源,等待下一次链接任务,这样可以提高响应的速度。

线程池的主要作用是负责分配、管理和释放数据库的连接

使用连接池后的优势

1、资源的高效利用:在c3p0连接池中,因为可以重复的使用已经存在的连接,所以避免了频繁的创建和释放连接,由此减少了大量的性能消耗。

2、更快的系统反应速度:因为这些连接都是重复使用的,而不是每次重新创建,需要使用的时候直接获取便可连接,减少了系统的响应时间。

3、统一的连接管理,避免数据库的连接泄露。

c3p0连接池的实际操作

1、数据库准备

-- ----------------------------

-- Table structure for t_user

-- ----------------------------

DROP TABLE IF EXISTS `t_user`;

CREATE TABLE `t_user` (

`user_id` int(11) NOT NULL AUTO_INCREMENT,

`user_name` varchar(50) DEFAULT NULL,

`password` varchar(50) DEFAULT NULL,

`money` double DEFAULT NULL,

`register_time` datetime DEFAULT NULL,

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

-- ----------------------------

-- Records of t_user

-- ----------------------------

INSERT INTO `t_user` VALUES ('1', '张三三', 'zhangsan', '100.9', '2020-05-20 17:09:15');

INSERT INTO `t_user` VALUES ('2', '李四', 'lisi', '200.8', '2020-05-20 17:09:28');

INSERT INTO `t_user` VALUES ('3', '王五', 'wangwu', '1000', '2020-05-20 17:09:43');

INSERT INTO `t_user` VALUES ('4', 'root', 'root', '100000', '2020-05-20 17:09:56');

INSERT INTO `t_user` VALUES ('5', 'admin', 'admin', '50.5', '2020-05-20 17:10:11');

2、c3p0连接池的依赖jar包

dea00fce259daf266c95ad0ee1816996.png

下载地址:链接:https://pan.baidu.com/s/1N5xhm6HtrkrDBRJhz7YmbQ

3、c3p0连接池的配置文件c3p0-config.xml

说明:c3p0-config.xml配置文件为连接池的模板文件,必须放在src文件夹下面,并且名字不能随意修改。

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/db_demo?useUnicode=true&characterEncoding=utf8

root

10

10

5

100

30

使用C3P0连接池完成向数据库中新增数据

import java.sql.Connection;

import java.sql.PreparedStatement;

/**

*

*

Title: AddTest

*

Description: c3p0添加的方法

* @author Alon

* @date 2020年5月22日

*/

public class InsertTest {

//声明两个属性:

private static Connection conn = null;

private static PreparedStatement ps = null;

public static void main(String[] args) {

try {

//获取链接:

conn = C3P0Utils.getConn();

//编写sql语句

String sql = "INSERT INTO t_user(user_name,password,money) value(?,?,?)";

//创建执行sql语句的对象

ps = conn.prepareStatement(sql);

//设置?的值

ps.setString(1, "小白");

ps.setString(2, "xiaobai");

ps.setDouble(3, 1000.0);

//执行sql语句:row为改变了多少行

int row = ps.executeUpdate();

System.out.println("改变的行数:"+row);

//关闭资源

C3P0Utils.close(conn, ps);

} catch (Exception e) {

e.printStackTrace();

}

}

}

使用C3P0连接池完成删除数据库中的数据

import java.sql.Connection;

import java.sql.PreparedStatement;

/**

*

*

Title: DeleteTest

*

Description: 删除数据库中的内容

* @author Alon

* @date 2020年5月22日

*/

public class DeleteTest {

//声明两个属性

private static Connection conn = null;

private static PreparedStatement ps = null;

public static void main(String[] args) {

try {

//获取链接:

conn = C3P0Utils.getConn();

//编写sql语句

String sql = "DELETE FROM t_user WHERE user_id=7";

//创建执行sql的对象

ps = conn.prepareStatement(sql);

//执行

int row = ps.executeUpdate();

System.out.println("改变的行数:"+row);

//关闭资源

C3P0Utils.close(conn, ps);

} catch (Exception e) {

e.printStackTrace();

}

}

}

使用C3P0连接池完成修改数据库中的数据

import java.sql.Connection;

import java.sql.PreparedStatement;

/**

*

*

Title: UpdateTest

*

Description: 更新数据库中的数据

* @author Alon

* @date 2020年5月22日

*/

public class UpdateTest {

//声明两个属性:

private static Connection conn = null;

private static PreparedStatement ps = null;

public static void main(String[] args) {

try {

//创建链接

conn = C3P0Utils.getConn();

//编写sql语句

String sql = "UPDATE t_user SET user_name = ? WHERE user_id = ?";

//获取执行sql的对象

ps = conn.prepareStatement(sql);

//设置?的值

ps.setString(1, "小黑");

ps.setInt(2, 2);

//执行sql语句

int row = ps.executeUpdate();

System.out.println("修改的行数:"+row);

//关闭资源

C3P0Utils.close(conn, ps);

} catch (Exception e) {

e.printStackTrace();

}

}

}

使用C3P0连接池完成查询数据库中的数据

/**

*

*

Title: QueryTest

*

Description: 查询数据库中的数据

* @author Alon

* @date 2020年5月22日

*/

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public class QueryTest {

//声明两个属性:

private static Connection conn = null;

private static PreparedStatement ps = null;

private static ResultSet rs = null;

public static void main(String[] args) {

try {

//获取数据库的链接

conn = C3P0Utils.getConn();

//编写sql语句

String sql = "SELECT user_id,user_name,password,money,register_time FROM t_user";

//获取执行sql的对象

ps = conn.prepareStatement(sql);

//执行语句并获得链接

rs = ps.executeQuery();

//获取数据库中的值

while(rs.next()) {

int userId = rs.getInt("user_id");

String userName = rs.getString("user_name");

String password = rs.getString("password");

double money = rs.getDouble("money");

String time = rs.getString("register_time");

System.out.print("用户id:"+userId);

System.out.print("用户名:"+userName);

System.out.print("密码:"+password);

System.out.print("金额:"+money);

System.out.println("注册时间:"+time);

}

//关闭资源

C3P0Utils.close(conn, ps, rs);

} catch (Exception e) {

e.printStackTrace();

}

}

}

Java中配置数据库连接池的步骤如下: 1.引入数据库连接池的依赖包,例如`c3p0`、`druid`等。 2.在配置文件中配置数据库连接池参数,例如`c3p0`的配置如下: ``` c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://localhost:3306/test c3p0.user=root c3p0.password=123456 c3p0.maxPoolSize=20 c3p0.minPoolSize=2 c3p0.initialPoolSize=5 c3p0.maxIdleTime=600 ``` 其中,driverClass指定数据库驱动程序,jdbcUrl指定数据库连接地址,user和password指定连接数据库的账号和密码,maxPoolSize和minPoolSize指定连接池中连接的最大和最小数量,initialPoolSize指定连接池中初始连接数,maxIdleTime指定连接最大空闲时间。 3.在Java代码中获取连接池对象,例如`c3p0`的获取方式如下: ``` ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUser("root"); dataSource.setPassword("123456"); ``` 4.从连接池中获取连接对象,例如`c3p0`的获取方式如下: ``` Connection conn = dataSource.getConnection(); ``` 5.使用完连接后,将连接对象归还到连接池中,例如: ``` conn.close(); ``` 完整的示例代码如下: ``` import com.mchange.v2.c3p0.ComboPooledDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcDemo { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //获取连接池对象 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUser("root"); dataSource.setPassword("123456"); //从连接池中获取连接 conn = dataSource.getConnection(); //执行SQL语句 pstmt = conn.prepareStatement("SELECT * FROM student"); rs = pstmt.executeQuery(); //处理结果集 while (rs.next()) { System.out.println("学号:" + rs.getInt("id") + ",姓名:" + rs.getString("name") + ",年龄:" + rs.getInt("age")); } } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { //关闭数据库连接 try { if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 以上是使用`c3p0`连接池的示例,其他连接池使用方法类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值