下面我将详细讲解使用c3p0连接数据库实现增删改查的完整攻略。
使用c3p0连接数据库
c3p0是一个开源的JDBC连接池库。它被大量应用于Java Web开发中,可以有效降低数据库的开销,优化系统的性能。下面介绍如何使用c3p0连接数据库。
步骤一:引入c3p0库
在Java工程的pom.xml文件中添加以下依赖:
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
步骤二:配置数据库连接信息
在项目中建立c3p0-config.xml文件,进行数据库连接池的配置:
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
<!-- 数据库的用户名和密码 -->
<property name="user">root</property>
<property name="password">root</property>
<!-- jdbc驱动类名 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 初始化时获取连接的个数 -->
<property name="initialPoolSize">5</property>
<!-- 连接池中保留的最大连接数 -->
<property name="maxPoolSize">20</property>
<!-- 连接池中保留的最小连接数 -->
<property name="minPoolSize">2</property>
<!-- 当连接池中的连接用完时,客户端调用getConnection()后等待获取新连接的最长时间(以毫秒为单位),超时将抛出SQLException -->
<property name="checkoutTimeout">5000</property>
<!-- 每60秒检查所有连接池中的空闲连接,这个操作比较耗费性能,建议不要设置过频繁 -->
<property name="idleConnectionTestPeriod">60</property>
步骤三:使用连接池
在项目中建立DBUtil工具类,进行数据库连接池的使用:
public class DBUtil {
/** 数据源 */
private static ComboPooledDataSource dataSource;
static {
try {
// 创建数据源
dataSource = new ComboPooledDataSource();
// 加载c3p0-config.xml,否则会使用默认值
dataSource.setConfigFile("c3p0-config.xml");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 获取一个数据库连接
*
* @return Connection
*/
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放连接
*
* @param con
*/
public static void releaseConnection(Connection con) {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
以上步骤完成后,就可以使用DBUtil.getConnection()方法获取一个数据库连接,并进行增删改查操作了。
数据库操作
查询数据
使用c3p0连接池进行查询数据的代码示例:
public class UserDao {
public List<User> queryAllUsers() throws SQLException {
List<User> users = new ArrayList<>();
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 获取数据库连接
con = DBUtil.getConnection();
// SQL语句
String sql = "SELECT id, name, age FROM user";
// 预编译SQL
ps = con.prepareStatement(sql);
// 执行查询
rs = ps.executeQuery();
// 处理结果
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
throw e;
} finally {
// 释放连接
DBUtil.releaseConnection(con);
// 释放资源
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
}
return users;
}
}
插入数据
使用c3p0连接池进行插入数据的代码示例:
public class UserDao {
public boolean addUser(User user) throws SQLException {
boolean result = false;
Connection con = null;
PreparedStatement ps = null;
try {
// 获取数据库连接
con = DBUtil.getConnection();
// SQL语句
String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
// 预编译SQL
ps = con.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
// 执行插入
int count = ps.executeUpdate();
if (count > 0) {
result = true;
}
} catch (SQLException e) {
e.printStackTrace();
throw e;
} finally {
// 释放连接
DBUtil.releaseConnection(con);
// 释放资源
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
}
return result;
}
}
总结
以上就是使用c3p0连接数据库实现增删改查的完整攻略。需要注意的是,在使用连接池时,一定要正确释放数据库连接和相关资源,避免出现内存泄漏和数据库连接泄漏问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用c3p0连接数据库实现增删改查 - Python技术站