使用c3p0连接数据库实现增删改查

下面我将详细讲解使用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&amp;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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C语言中system()函数的用法总结

    下面我将详细讲解C语言中system()函数的用法总结。 1. system函数简介 system()函数是C语言中的一种库函数,它可以用来在程序中执行特定的外部命令,比如在Windows下运行cmd命令,执行变量设置等。 system()函数的函数原型为: int system(const char *command); 其中,command参数表示要执行…

    C 2023年5月23日
    00
  • win10开机蓝屏终止代码SYSTEM_SERVICE_EXCEPTION怎么办

    以下是针对“win10开机蓝屏终止代码SYSTEM_SERVICE_EXCEPTION”的详细攻略: 概述 “SYSTEM_SERVICE_EXCEPTION”是Windows系统蓝屏错误代码之一,表示系统服务异常。出现这种错误一般是由于系统设备驱动程序出现问题或者是系统文件损坏等原因引起的。启动Windows时出现“SYSTEM_SERVICE_EXCEP…

    C 2023年5月23日
    00
  • C++ main函数的几点细节

    下面是对于 “C++ main函数的几点细节” 的详细解释: 1. main函数的返回值类型 在C++中 main 函数一般定义为 int main() 或 int main(int argc, char* argv[])。其中,int指定了 main 函数的返回值类型,表示程序的执行结果是否成功。通常情况下,程序执行成功时返回0,否则返回一个非零值。 下面…

    C 2023年5月22日
    00
  • 华为7c微信分身怎么找?

    华为7c的微信分身功能,让用户可以在一个手机上同时使用多个微信账户,非常方便。下面是详细的攻略: 步骤一:打开设置 首先,在华为7c的桌面找到“设置”应用,点击进入。 步骤二:进入应用管理 在“设置”界面中,找到“应用管理”选项,点击进去。 步骤三:找到微信 在应用管理的界面中,找到并点击“微信”应用图标。 步骤四:创建微信分身 在微信的应用信息页中,向下滑…

    C 2023年5月23日
    00
  • Android NDK开发(C语言基本数据类型)

    Android NDK开发(C语言基本数据类型)攻略 什么是Android NDK? Android NDK(Native Development Kit)是一个允许您使用C和C++代码在Android设备上开发应用程序的工具集。NDK允许您在Android应用程序中使用底层C和C++代码,从而提高应用程序性能。使用NDK可以实现以下功能: 构建基于C/C+…

    C 2023年5月24日
    00
  • strings命令分析浅谈Go和C++编译时的一点小区别

    标题 引言 字符串处理是编程中经常遇到的一个问题。在操作系统中有一个strings命令可以用来找出二进制文件中所有的可打印字符串,并输出到终端上。在本篇文章中,我将会分析Go和C++编译时的一点小区别,使得大家能够更好地了解这两种语言的差异。 具体分析 C++和Go编译器在执行strings命令时存在一些小的差别。下面我们分别来具体分析。 C++ 我们首先用…

    C 2023年5月23日
    00
  • C语言通讯录管理系统完整代码

    C语言通讯录管理系统完整代码攻略 概述 本文将介绍C语言实现的通讯录管理系统的完整代码,并且对代码进行详细讲解说明。该代码实现的功能包括通讯录的增加、删除、修改、查询和展示等。 代码说明 代码结构 该代码主要分为两个文件,一个是 main.c,另一个是 contacts.h。其中 main.c 中包含了程序的入口 main 函数以及 contacts.h 的…

    C 2023年5月23日
    00
  • 酷派大神F1怎么开启C键?

    酷派大神F1开启C键攻略 如果您是酷派大神F1手机的用户,可能会遇到需要使用C键的情况。但是,许多人并不知道该如何在酷派大神F1手机上开启C键。本篇文章将讲解如何开启C键,并提供示例以帮助您更好地理解和操作。 第一步:打开设置 首先,您需要打开酷派大神F1手机的设置菜单。您可以在移动设备屏幕上找到应用菜单,从中打开设置选项。 第二步:进入系统设置 在设置菜单…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部