关于DbUtils的使用介绍
DBUtils三大核心功能
1、QueryRunner中提供对sql语句操作的API.
update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用来完成表数据的查询操作
2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
3、DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner核心类
1、new QueryRunner(DataSource ds) 提供数据源(连接池),dbutils底层自动维护连接connection。
2、update(String sql,Object…params),执行更新数据
3、query(String sql ,ResultSetHandler rsh,Object…params) ,执行查询。
QueryRunner类的update方法介绍:
1、update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作
2、使用QueryRunner类,实现对数据表的insert delete update
3、调用QueryRunner类的方法 update (Connection con,String sql,Object…param)
4、Object…param 可变参数,Object类型,SQL语句会出现?占位符
5、数据库连接对象,自定义的工具类传递
ResultSetHandler结果集处理类
DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具。你可以自己去实现这个接口,把ResultSet转换成你想要的类型。DBUtils提供了很多个ResultSetHandler接口的实现,这些实现已经基本够用了,我们通常不用自己去实现ResultSet接口了。
1、MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!
2、MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;
3、BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
4、BeanListHandler:多行处理器!把结果集转换成List;
5、ColumnListHandler:多行单列处理器!把结果集转换成List,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
6、ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。
DbUtils类
它就是一个工具类,定义了关闭资源与事务处理的方法。
代码:
添加所有用户方法
public class TestDBUtils1 {
public void testAddUser() {
try {
// 1.创建核心类QueryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写SQL语句
String sql = "insert into tbl_user values(null,?,?)";
// 3.为站位符设置值
Object[] params = { "余淮", "耿耿" };
// 4.执行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("添加成功!");
} else {
System.out.println("添加失败!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
根据id修改用户方法
public void testUpdateUserById() {
try {
// 1.创建核心类QueryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写SQL语句
String sql = "update tbl_user set upassword=? where uid=?";
// 3.为站位符设置值
Object[] params = { "xxx", 21 };
// 4.执行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("修改成功!");
} else {
System.out.println("修改失败!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
根据id删除用户方法
public void testDeleteUserById() {
try {
// 1.创建核心类QueryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写SQL语句
String sql = "delete from tbl_user where uid=?";
// 3.为站位符设置值
Object[] params = {19};
// 4.执行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
查询所有用户方法
public void testQueryAll() {
try {
// 1.获取核心类queryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写sql语句
String sql = "select * from tbl_user";
// 3.执行查询操作
List<User> users = qr.query(sql, new BeanListHandler<User>(User.class));
// 4.对结果集集合进行遍历
for (User user : users) {
System.out.println(user.getUname() + " : " + user.getUpassword());
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 根据id查询用户方法
*/
@Test
public void testQueryUserById() {
try {
// 1.获取核心类queryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写sql语句
String sql = "select * from tbl_user where uid=?";
//3.为占位符设置值
Object[] params = {21};
// 4.执行查询操作
User user = qr.query(sql, new BeanHandler<User>(User.class), params);
System.out.println(user.getUname() + " : " + user.getUpassword());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 根据所有用户的总个数
*/
@Test
public void testQueryCount() {
try {
// 1.获取核心类queryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写sql语句
String sql = "select count(*) from tbl_user";
// 4.执行查询操作
Long count = (Long) qr.query(sql, new ScalarHandler());
System.out.println(count);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 查询所有用户方法
*/
@Test
public void testQueryAll1() {
try {
// 1.获取核心类queryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写sql语句
String sql = "select * from tbl_user";
// 3.执行查询操作
List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
// 4.对结果集集合进行遍历
for (Map<String, Object> map : list) {
System.out.println(map);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 查询所有用户方法
*/
@Test
public void testQueryAll2() {
try {
// 1.获取核心类queryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
// 2.编写sql语句
String sql = "select * from tbl_user";
// 3.执行查询操作
List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
// 4.对结果集集合进行遍历
for (Object object : list) {
System.out.println(object);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}