1、概述
DBUtil是java编程中的数据库操作实用工具,小巧简单实用。
DBUtil封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
DBUtil三个核心功能介绍
● QueryRunner中提供对sql语句操作的API
● ResultSetHandler接口,用于定义select操作后,怎样封装结果集
● DButil类,它就是一个工具类,定义了关闭资源与事务处理的方法
2、QueryRunner核心类
- queryRunner(DataSource ds),提供数据源(连接池),DBUtil底层自动维护connection
- update(String sql,Object...params),执行更新数据
- query(String sql,ResultSetHandler<T> rsh,Object...params),执行查询
3、ResultSetHandler结果集处理类
ArrayHandler |
将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段值 |
ArrayListHandler |
将结果集中的第一条记录封装到一个Object[]数组中,将这些数组再封装到List集合中。 |
BeanHandler |
将结果集中第一条记录封装到一个指定JavaBean中。 |
BeanListHandler |
将结果集中每一条记录封装到一个指定JavaBean中,将这些javaBean在封装到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集合中 |
ScalarHandler |
它是用于单数据。例如select count(*) from 表操作。 |
4、DBUtil工具类
- closeQuietly(Connection conn)关闭连接,如果有异常try后不抛。
- commitAndColseQuietly(Connection conn) 提交并关闭连接
- rollbackAndColseQuietly(Connection conn) 回滚并关闭连接
5、实例
C3p0_util(获取连接池):
public class C3p0_util {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("yuye");
//获得C3P0连接池
public static DataSource getDataSource() {
return dataSource;
}
//获得connection
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException();
}
}
}
Query:
public class Query {
@Test
public void QueryAll() {
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "select * from student";
try {
List<Student> students = qr.query(sql, new BeanListHandler<Student>(Student.class));
for (Student student : students) {
System.out.println(student.getSid()+"\t"+student.getName()+"\t"+student.getCourse_id());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void QueryById() {
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "select * from student where sid=?";
Object param = "s02";
try {
Student student = qr.query(sql, new BeanHandler<Student>(Student.class), param);
System.out.println(student.getSid()+"\t"+student.getName()+"\t"+student.getCourse_id());
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void QueryCount() {
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "select count(*) from student";
try {
Object i = qr.query(sql, new ScalarHandler());
System.out.println("总共有"+i+"条记录");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void QueryByMapList() {
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "select * from student";
try {
List<Map<String, Object>> set = qr.query(sql, new MapListHandler());
for (Map<String, Object> map : set) {
System.out.println(map.get("sid")+"\t"+map.get("name")+"\t"+map.get("course_id"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void QueryByMap() {
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "select * from student where sid='s02'";
try {
Map<String, Object> map = qr.query(sql, new MapHandler());
System.out.println(map.get("sid")+"\t"+map.get("name")+"\t"+map.get("course_id"));
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Update:
public class Update {
@Test
public void update() {
//创建DBUtil核心类
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "update student set name='貂蝉' where sid=?";
Object[] params = {"s02"};
try {
int se = qr.update(sql, params);
if(se>0)
System.out.println("更新成功");
else
System.out.println("更新失败");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void insert() {
//创建DBUtil核心类
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "insert into student values(?,?,?)";
Object[] params = {"s05","狄仁杰","c05"};
try {
int se = qr.update(sql, params);
if(se>0)
System.out.println("插入成功");
else
System.out.println("插入失败");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void delete() {
//创建DBUtil核心类
QueryRunner qr = new QueryRunner(C3p0_util.getDataSource());
String sql = "delete from student where sid=?";
Object param = "s05";
try {
int se = qr.update(sql, param);
if(se>0)
System.out.println("成功删除");
else
System.out.println("删除失败");
} catch (SQLException e) {
e.printStackTrace();
}
}
}