JavaEE基础(06):Servlet整合C3P0数据库连接池
本文源码: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数据库连接池相关推荐
- Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等
MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...
- 数据库连接池 DBCP和c3p0数据库连接池
一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...
- spring 整合c3p0连接池
个人博客:https://suveng.github.io/blog/ Spring 整合C3P0连接池 注意:环境 jdk1.8 ,idea 2018,maven,spring环境 代 ...
- 【JDBC】使用c3p0数据库连接池的各种报错警告
使用c3p0数据库连接池的各种报错警告 使用c3p0数据库连接池的时候,先导入了三个jar包在lib 文件夹中, c3p0-0.9.5.2.jar mchange-commons-java-0.2.3 ...
- c3p0 数据库连接池
C3P0连接池 c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以 ...
- [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等...
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池
数据库连接池种类 1.JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现 2.C3P0数据库连接池,速度相对较慢,稳 ...
- 数据库连接池及C3P0数据库连接池技术
数据库连接池(重要) 注意数据库连接池只是简化获得数据库连接对象和关流的部门 1.数据库连接池: 1.概念: 其实就是一个容器(在Java中就是集合),存在数据库连接的容器,当系统初始化好后,容器被创 ...
- C3P0数据库连接池的配置
在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0 ...
最新文章
- python用for循环一直出现最后一个值_python中for循环的list最后一个数据总会覆盖前面的数据...
- 山西计算机软考知识点,计算机软考考试必备知识点:数据标准化
- 判断图有无环_链表:环找到了,那入口呢?
- # vmware异常关机后,虚拟系统无法启动的解决办法
- 【arduino】不做不死系列,用arduino玩CyberPi童芯派之helloworld点灯
- Gradle标准project属性
- Java集合容器面试题
- mac上用qt调用自己生成的qt动态库,该动态库又依赖第三方库
- 在Linux上使用logwatch分析监控日志文件
- 【Clickhouse】Too many partitions for single INSERT block (more than 100)
- 测试面试集-Python接口自动化测试
- 在inet下写一个“HelloWorld”程序
- JS鼠标捕获DIV内选中的坐标和宽高
- javascript中的this指向问题
- 休闲实用英语:别误会这些英文的意思
- 微信开发如何屏蔽投诉按钮(附代码)
- ssm基于微信小程序的新生自助报到系统+ssm+uinapp+Mysql+计算机毕业设计
- 降本增效这九个月,爱奇艺从“穿越火线”,到“冷静增长”
- 数学与应用数学专业考计算机研究生,数学与应用数学专业学生考研有哪些方向 数学与应用数学专业学生考研方向是怎样的...
- 安卓recovery菜单中英文对照