1,说明:
DBUtils是java编程中数据库操作的实用工具,小巧简单实用。第一个操作数据库的框架(jar)
DBUtils封装了许多JDBC的代码,简化了JDBC操作,可以少写很多代码
DBUtils三个核心功能的介绍:
DBUtils类:
它就是一个工具类,定义了关闭资源和事务处理的方法
QueryRunner类:
提供了对sql语句操作的方法,query():查询,update():修改
ResultSetHandler接口:
用于定义select操作后,如何封装结果集
QueryRunner核心类
QueryRunner(DataSource ds):提供数据源(连接池)DataSource,DBUtils底层自动维护和连接Connection数据库query(String sql, ResultSetHandler<T> rsh, Object... params):执行查询语句select
update(String sql, Object... params):执行更新语句insert,update,delete,参数就是一个数组,参数个数取决于sql语句中?的个数
2. ResultSetHandler结果集处理
Handler类型 | 说明 |
---|---|
BeanHandler | 将结果集中第一条记录封装到一个指定的javaBean中。 |
BeanListHandler | 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
ScalarHandler | 它是用于单个数据。例如select count(*) from 表操作。 |
ArrayHandler | 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
ArrayListHandler | 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 |
ColumnListHandler | 将结果集中指定的列的字段值,封装到一个List集合中 |
KeyedHandler | 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。 |
MapHandler | 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值 |
MapListHandler | 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。 |
3. javaBean组件
JavaBean就是一个类,在开发中常用于封装数据。具有如下特性
1.需要实现接口:java.io.Serializable ,通常偷懒省略了。
2.提供私有字段:private 类型 字段名;
3.提供getter/setter方法:
4.提供无参构造
javabean类:User类
public class User{
private int Uid;
private String Uname;
public User() {
}
public int getUid() {
return Uid;
}
public void setUid(int uid) {
this.Uid = uid;
}
public String getUname() {
return Uname;
}
public void setUname(String uname) {
this.Uname = uname;
}
public String getUpassword() {
return Upassword;
}
public void setUpassword(String upassword) {
this.Upassword = upassword;
}
}
4. DBUtils完成CRUD
首先必须用C3P0编写一个工具类,所以要提供C3P0的jar包和xml配置文件,其次还需要DBUtils的jar包 :
commons-dbutils-1.4.jar
编写测试类
根据C3P0的工具类创建连接池
根据要求用QueryRunner完成查询和更新,用ResultSetHandler完成结果集操作
释放资源(DBUtils查询完自动放回连接或关闭资源)
5. 练习
对user表增删改查
1、增(update)
要求:向user表添加一条数据:null,"王五",“赵六"
@Test
public void insert() {
//1:通过连接池获取QueryRunner对象,QueryRunner底层自动维护和获取连接对象Connection
//QueryRunner()中传入连接池,因此要在C3P0Utils里面加入获取连接池的方法,getDataSource()
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "insert into user values(?,?,?)";
//3:使用QueryRunner的update()方法进行操作
Object[] params = {null,"王五",“赵六”};
try {
qr.update(sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
2、删(update)
//从user表中删除name为李二的数据
@Test
public void delete() {
//1:通过连接池获取QuerryRunner对象
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "delete from user where name=?";
//3.使用QueryRunner的update方法执行sql语句
Object[] params = {"李二"};
try {
qr.update(sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
3、改(update)
@Test
public void alter() {
//1:通过连接池获取QueryRunner对象
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "update user set Upassword=? where Uname=?";
//3:使用QueryRunner对象的update方法执行sql语句
Object[] params = {88,"张三"};
try {
qr.update(sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
4、查(query)
要求:查询user表中所有人的信息(查询许多行信息)
//查询user表中所有人的信息
@Test
public void queryAll() {
//1:通过连接池获取QueryRunner对象
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "select * from user";
//3:使用QueryRunner的query方法查询
Object[] params = {};
try {
//获取所有人的数据,使用BeanListHandler<>(User.class),以User封装得到的字段信息,
存储入集合List
List<User> user = qr.query(sql, new BeanListHandler<>(User.class), params);
System.out.println(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
要求:查询user表中name为李四的信息(查询一行信息)
@Test
public void query() {
//1:通过连接池获取QueryRunner对象
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "select * from user where name=?";
//3:使用QueryRunner的query方法查询一行数据
Object[] params = {"何一"};
try {
//查询一行数据,不需要用集合存储,用单个用户储存即可,因此用BeanHandler
User userr = qr.query(sql, new BeanHandler<>(User.class), params);
System.out.println(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
//要求:统计user表中的人数
@Test
public void queryOne() {
//1:通过连接池获取QueryRunner对象
QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
//2:编写sql语句
String sql = "select count(*) from user";
//3:使用QueryRunner的query方法查询
Object[] params = {};
try {
Object count = qr.query(sql, new ScalarHandler());
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}
}
}