1.通过JDBC使用C3P0连接池
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。
例如:
1.创建数据库表
create table t_user(
u_id int primary key auto_increment,
u_name varchar(20),
u_age int,
u_address varchar(30)
);
2.创建Java项目,导入依赖包
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.15.jar
mysql-connector-java-5.1.38.jar
3.在src下创建c3p0的配置文件【c3p0-config.xml】
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- c3p0的默认配置项 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<!-- 定义的数据库配置 -->
<named-config name="test">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">25</property>
<property name="maxPoolSize">200</property>
</named-config>
</c3p0-config>
4.创建javabean
5.创建数据库访问类
package com.wangxing.jdbcc3p0.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.wangxing.jdbcc3p0.bean.UserBean;
/**
* 用户信息的访问类
*
* @author Administrator
*
*/
public class UserBeanDaoClass {
// 定义保存c3p0数据源对象
private ComboPooledDataSource dataSource = null;
public UserBeanDaoClass() {
// 加载c3p0-config.xml文件中默认的config
// 初始化数据源
dataSource = new ComboPooledDataSource();
// 初始化数据源,加载的是自定义的数据库表配置项
// dataSource =new ComboPooledDataSource("my");
}
// 添加用户信息
public void insertUser(UserBean userBean) {
Connection conn = null;
PreparedStatement statement = null;
try {
// 得到数据库连接
conn = dataSource.getConnection();
// 创建添加数据的sql语句
String insert = "insert into t_user values(null,?,?,?);";
System.out.println(insert);
// 创建PreparedStatement对象
statement = conn.prepareStatement(insert);
// 传递“?”所需的数据值--PreparedStatement对象的setXXXX(位置,数据值)
statement.setString(1, userBean.getUname());
statement.setInt(2, userBean.getUage());
statement.setString(3, userBean.getUaddress());
// 执行添加sql
int temp = statement.executeUpdate();
if (temp > 0) {
System.out.println("添加信息成功");
}
} catch (Exception e) {
System.out.println("添加信息失败");
e.printStackTrace();
} finally {
if (statement != null && conn != null) {
try {
statement.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 根据用户id修改用户信息
public void updateUser(UserBean userBean) {
Connection conn = null;
PreparedStatement statement = null;
try {
// 得到数据库连接
conn = dataSource.getConnection();
// 创建修改数据的sql语句
String update = "update t_user set u_name=?,u_age=?,u_address=? where u_id=?;";
System.out.println(update);
// 创建PreparedStatement对象
statement = conn.prepareStatement(update);
// 传递“?”所需的数据值--PreparedStatement对象的setXXXX(位置,数据值)
statement.setString(1, userBean.getUname());
statement.setInt(2, userBean.getUage());
statement.setString(3, userBean.getUaddress());
statement.setInt(4, userBean.getUid());
// 执行修改sql
int temp = statement.executeUpdate();
if (temp > 0) {
System.out.println("修改信息成功");
}
} catch (Exception e) {
System.out.println("修改信息失败");
e.printStackTrace();
} finally {
if (statement != null && conn != null) {
try {
statement.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 根据用户id查询用户信息
public UserBean selectUserById(int userid) {
UserBean userbean = null;
Connection conn = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
// 得到数据库连接
conn = dataSource.getConnection();
// 创建根据用户id查询用户信息sql语句
String select =