c3p0连接池、DBUtils的用法和代码

下载并导包

JDBC:
https://download.csdn.net/download/qq_41635282/14021461
c3p0-0.9.5.2.jar:
https://download.csdn.net/download/qq_41635282/14020390
mchange-commons-java-0.2.11.jar:
https://download.csdn.net/download/qq_41635282/14020405
导包教程:
https://blog.csdn.net/qq_41635282/article/details/112170842

编写数据库连接的配置文件

1.名字是规定好的,不可更改。
2.该文件必须放在src路径下。
有两种配置文件,随便选一个就好;

c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>

 <!-- 文件名必须是c3p0-config.xml -->
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->

    <default-config> 

 <property name="driverClass">com.mysql.jdbc.Driver</property>

 <property name="jdbcUrl">

 <!-- student是数据库名,替换成自己的数据库名 -->
 <![CDATA[jdbc:mysql://localhost:3306/student?serverTimezone=UTC]]>

 </property>
 
 <!-- 数据库用户名 -->
 <property name="user">root</property>

 <!-- 数据库密码 -->
 <property name="password">root</property>

 <!-- 初始化池大小 -->

 <property name="initialPoolSize">2</property>

 <!-- 最大空闲时间 -->

 <property name="maxIdleTime">30</property>

 <!-- 最多有多少个连接 -->

 <property name="maxPoolSize">10</property>

 <!-- 最少几个连接 -->

 <property name="minPoolSize">2</property>

 <!-- 每次最多可以执行多少个批处理语句 -->

 <property name="maxStatements">50</property>

 </default-config> <!-- 命名的配置 -->

 <named-config name="demo">

 <property name="driverClass">com.mysql.jdbc.Driver</property>

 <property name="jdbcUrl"><![CDATA[jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8]]></property>

 <property name="user">root</property>

 <property name="password">1234</property>

 <property name="acquireIncrement">5</property><!-- 如果池中数据连接不够时一次增长多少个 -->

 <property name="initialPoolSize">100</property>

 <property name="minPoolSize">50</property>

 <property name="maxPoolSize">1000</property>

 <property name="maxStatements">0</property>

 <property name="maxStatementsPerConnection">5</property>

 <!-- he's important, but there's only one of him -->

 </named-config>

</c3p0-config> 

c3p0.properties
c3p0.driverClass=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/student?serverTimezone=UTC
c3p0.user=root
c3p0.password=root
c3p0.maxPoolSize=50

c3p0连接池代码测试

package com.binjiu.C3P0;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class c3p0 {
	public static void main(String[] args) throws SQLException {
		//创建连接池对象
		ComboPooledDataSource ds=new ComboPooledDataSource();
		//从连接池中获取连接
		Connection con = ds.getConnection();
		//验证数据库是否连接成功
		if(con!=null) {
			System.out.println("数据库连接成功");
		}else {
			System.out.println("数据库连接失败!");
		}
		String sql="select * from students";
		//创建sql语句执行器
		PreparedStatement ps=con.prepareStatement(sql);
		//执行语句
		ResultSet rs = ps.executeQuery();
		while(rs.next()) {
			int id=rs.getInt("学号");
	 		String name = rs.getString("姓名");
	 		int age = rs.getInt("年龄");
	 		String sex = rs.getString("性别");
	 		String email = rs.getString("邮箱");
	 		Date birthday = rs.getDate("生日");
	 		int akt = rs.getInt("武力值");
	 		//打印数据
	 		System.out.println("学号:"+id +" 姓名:"+name +" 年龄:"+age+" 性别:"+sex+" 邮箱:"+email+" 生日:"+birthday+" 武力值:"+akt);
		}
		rs.close();
		ps.close();
		con.close();
	}
}

在这里插入图片描述

DBUtils工具

导包:commons-dbutils-1.7.jar

DbUtils简介

1.Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。尤其结合连接池使用效果更为理想。
2.Commons DbUtils 的核心是两个类一个接口:
2.1 DBUtils类:主要为关闭连接,装载JDBC驱动程序之类的常规工作提供方法,都是静态的方法。
2.2 QueryRunner类:为我们提供两个重要方法,调用方法之前需要先创建一个QueryRunner的对象。

QueryRunner qRunner=new QueryRunner(new ComboPooledDataSource());

创建对象时需要传入一个连接池的数据源,这是结合c3p0连接池来完成。

方法说明
qRunner.update()支持DML(数据操纵语言)操作
qRunner.query()支持DQL(数据查询语言)操作

2.3 ResultSetHandler 接口:用于处理ResultSet结果集,讲结果集的数据转换成不同形式。该接口的实现类有很多:

实现类说明
ArrayHandler将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中
BeanHandler将结果集中第一条记录封装到一个指定的javaBean中
BeanListHandler将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler将结果集中指定的列的字段值,封装到一个list集合中
ScalarHandler它是用于单列数据查询,例如:select count(*) from students
MapHandler将结果集中第一条记录封装到Map集合中,Key代表列名,Value代表该列数据
MapListHandler将集合中每一条记录封装到Map集合中,Key代表列名,Value代表值,Map集合再存储到List集合

javaBean

javaBean简介

JavaBean是使用java语言开发的一个可重用的组件,再JSP得开发中可以使用javaBean减少重复代码,使整个JSP代码得开发更简洁。简单来讲就是实体类,用来支持业务逻辑得协助类,在JDBC操作中一般一个实体类会对应数据库中的一张表,实体类中的属性会与表中的列一 一对应/

javaBean的设计原则
  1. 类必须公有,即使用public修饰;
  2. 类中属性必须私有,即使用private修饰;
  3. 必须为,每个属性封装get/set方法;
  4. 类中必须有无参构造;
javaBean

我的数据库中表‘account’的数据结构为:
在这里插入图片描述
AccountTable类:
定义与数据库中表account相同数据类型的属性和属性名,并写入set,get方法,tostring方法。

package com.bingjiu.dbutuls;

public class AccountTable {
	private int id;
	private String username;
	private double money;
	
	public AccountTable() {
		
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}
	@Override
	public String toString() {
		return "AccountTable [id=" + id + ", username=" + username + ", money=" + money + "]";
	}
}

DBUtils的DML、DQL操作

package com.bingjiu.dbutuls;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DbutilsDemo {
	public static void main(String[] args) throws SQLException {
		
		QueryRunner qr=new QueryRunner(new ComboPooledDataSource());
		
		/*
		 * 查询操作
		 * 用list集合获取query()方法的返回集,让进行遍历
		 */
		//查询account的所有数据
		String sql="select * from account";
		//将结果集中每一条记录封装到AccountTable类中,然后再封装到list集合中
		List<AccountTable> list=qr.query(sql, new BeanListHandler<AccountTable>(AccountTable.class));
		//重写tostring方法后直接输出即可
		System.out.println(list);
		//list集合遍历打印获取的值
		for(int i=0; i<list.size();i++) {
			System.out.println(list.get(i).getId()+"-->"+list.get(i).getUsername()+"-->"+list.get(i).getMoney());
		}
		
		/*
		 * 修改操作
		 */
		String sql_2="update account set money=? where id=?";
		//执行sql_2语句,300为第一个?号赋值,1第二个?赋值。返回数是受操作的行数(int类型)
		int n2 =qr.update(sql_2,300,1);
		if(n2>0) {
			System.out.println("修改成功!  受影响行数为:"+n2);
		}else {
			System.out.println("修改失败!");
		}
		
		
		
		/*
		 * 添加操作
		 */
		String sql_3="insert into account(id,username,money)values(4,'孙悟空',10)";
		//执行sql_3语句
		int n3=qr.update(sql_3);
		if(n3>0) {
			System.out.println("添加数据成功! 添加数据条数:"+n3);
		}else {
			System.out.println("添加数据失败!");
		}
		
		/*
		 * 删除操作
		 */
		String sql_4="delete from account where id=4";
		//执行sql_4语句
		int n4=qr.update(sql_4);
		if(n4>0) {
			System.out.println("删除成功! 删除的条数:"+ n4);
		}else {
			System.out.println("删除失败!");
		}
		
	}
}

在这里插入图片描述

我的数据库

数据库名:student
表名:account
表结构:
在这里插入图片描述
表数据:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值