本文源码:GitHub·点这里 || GitEE·点这里

一、C3P0连接池

1、C3P0简介

C3P0是一个开源的JDBC连接池,应用程序根据C3P0配置来初始化数据库连接,可以自动回收空闲连接的功能。

2、核心依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version>
</dependency>
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>${c3p0.version}</version>
</dependency>

3、配置文件

配置文件位置:放在resources目录下,这样C3P0组件会自动加载该配置。

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><!-- 核心参数配置 --><property name="jdbcUrl">jdbc:mysql://localhost:3306/servlet-jdbc</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">123</property><!-- 池参数配置 --><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</property><property name="maxPoolSize">10</property></default-config>
</c3p0-config>

4、编写工具类

该工具类用来获取数据库连接,和释放相关连接。

public class C3P0Pool {private static DataSource dataSource = new ComboPooledDataSource();public static DataSource getDataSource() {return dataSource ;}/*** 获取连接*/public static Connection getConnection() throws SQLException {return dataSource.getConnection();}/*** 释放连接*/public static void close(ResultSet resultSet, PreparedStatement pst, Connection connection) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (pst != null) {try {pst.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}

二、数据操作封装

1、新增数据

public class UserJdbcInsert {public static void insertUser (UserInfo userInfo){try {Connection connection = C3P0Pool.getConnection();String sql = "INSERT INTO user_info (user_name,user_age) VALUES (?,?)" ;PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1,userInfo.getUserName());statement.setString(2,userInfo.getUserAge().toString());statement.execute() ;C3P0Pool.close(null, statement, connection);} catch (Exception e) {e.printStackTrace();}}public static void batchInsertUser (List<UserInfo> userInfoList){try {Connection connection = C3P0Pool.getConnection();String sql = "INSERT INTO user_info (user_name,user_age) VALUES (?,?)" ;PreparedStatement statement = connection.prepareStatement(sql);for (UserInfo userInfo:userInfoList){statement.setString(1,userInfo.getUserName());statement.setString(2,userInfo.getUserAge().toString());statement.addBatch();}statement.executeBatch() ;C3P0Pool.close(null, statement, connection);} catch (Exception e) {e.printStackTrace();}}
}

2、查询数据

public class UserJdbcQuery {public static UserInfo queryUser (String userName){UserInfo userInfo = null ;try {Connection connection = C3P0Pool.getConnection();String sql = "SELECT * FROM user_info WHERE user_name=?" ;PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1,userName);ResultSet resultSet = statement.executeQuery() ;while (resultSet.next()){int id = resultSet.getInt("id");String name = resultSet.getString("user_name");int age = resultSet.getInt("user_age");System.out.println("ID:"+id+";name:"+name+";age:"+age);userInfo = new UserInfo(name,age) ;}C3P0Pool.close(resultSet, statement, connection);} catch (Exception e) {e.printStackTrace();}return userInfo ;}
}

3、更新数据

public class UserJdbcUpdate {public static void updateUser (String name,Integer age,Integer id){try {Connection connection = C3P0Pool.getConnection();String sql = "UPDATE user_info SET user_name=?,user_age=? WHERE id=?" ;PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1,name);statement.setInt(2,age);statement.setInt(3,id);statement.executeUpdate() ;C3P0Pool.close(null, statement, connection);} catch (Exception e) {e.printStackTrace();}}
}

4、删除数据

public class UserJdbcDelete {public static void deleteUser (Integer id){try {Connection connection = C3P0Pool.getConnection();String sql = "DELETE FROM user_info WHERE id=?" ;PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,id);statement.executeUpdate() ;C3P0Pool.close(null, statement, connection);} catch (Exception e) {e.printStackTrace();}}
}

三、Servlet接口

public class JdbcServletImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String userName = request.getParameter("userName") ;UserInfo userInfo = UserJdbcQuery.queryUser(userName) ;response.setContentType("text/html;charset=utf-8");response.getWriter().print("用户信息:"+userInfo);}
}

测试访问:

http://localhost:6003/jdbcServletImpl?userName=LiSi

页面打印:

用户信息:UserInfo{userName='LiSi', userAge=22}

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

JavaEE基础(06):Servlet整合C3P0数据库连接池相关推荐

  1. Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等

    MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...

  2. 数据库连接池 DBCP和c3p0数据库连接池

    一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...

  3. spring 整合c3p0连接池

    个人博客:https://suveng.github.io/blog/​​​​​​​ Spring 整合C3P0连接池 注意:环境 jdk1.8 ,idea 2018,maven,spring环境 代 ...

  4. 【JDBC】使用c3p0数据库连接池的各种报错警告

    使用c3p0数据库连接池的各种报错警告 使用c3p0数据库连接池的时候,先导入了三个jar包在lib 文件夹中, c3p0-0.9.5.2.jar mchange-commons-java-0.2.3 ...

  5. c3p0 数据库连接池

    C3P0连接池 c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以 ...

  6. [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池

    数据库连接池种类 1.JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现 2.C3P0数据库连接池,速度相对较慢,稳 ...

  8. 数据库连接池及C3P0数据库连接池技术

    数据库连接池(重要) 注意数据库连接池只是简化获得数据库连接对象和关流的部门 1.数据库连接池: 1.概念: 其实就是一个容器(在Java中就是集合),存在数据库连接的容器,当系统初始化好后,容器被创 ...

  9. C3P0数据库连接池的配置

    在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0 ...

最新文章

  1. python用for循环一直出现最后一个值_python中for循环的list最后一个数据总会覆盖前面的数据...
  2. 山西计算机软考知识点,计算机软考考试必备知识点:数据标准化
  3. 判断图有无环_链表:环找到了,那入口呢?
  4. # vmware异常关机后,虚拟系统无法启动的解决办法
  5. 【arduino】不做不死系列,用arduino玩CyberPi童芯派之helloworld点灯
  6. Gradle标准project属性
  7. Java集合容器面试题
  8. mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库
  9. 在Linux上使用logwatch分析监控日志文件
  10. 【Clickhouse】Too many partitions for single INSERT block (more than 100)
  11. 测试面试集-Python接口自动化测试
  12. 在inet下写一个“HelloWorld”程序
  13. JS鼠标捕获DIV内选中的坐标和宽高
  14. javascript中的this指向问题
  15. 休闲实用英语:别误会这些英文的意思
  16. 微信开发如何屏蔽投诉按钮(附代码)
  17. ssm基于微信小程序的新生自助报到系统+ssm+uinapp+Mysql+计算机毕业设计
  18. 降本增效这九个月,爱奇艺从“穿越火线”,到“冷静增长”
  19. 数学与应用数学专业考计算机研究生,数学与应用数学专业学生考研有哪些方向 数学与应用数学专业学生考研方向是怎样的...
  20. 安卓recovery菜单中英文对照

热门文章

  1. 第一个Python程序——博客自动访问脚本
  2. Java比较器概述即代码讲解实现
  3. 以太网帧格式、最少字节介绍(arp)
  4. JAVA中整数类型数据溢出问题研究
  5. 【一本通1347】格子游戏
  6. 20165307《网络对抗技术》Exp1 PC平台逆向破解
  7. UWP Acrylic Material
  8. 你所不知道的mybatis居然也有拦截器
  9. HTML学习笔记--HTML的语法【1】
  10. 10099 The Tourist Guide