数据库操作工具包
使用Java中的JDBC连接数据库,冗余代码过多,为了简化JDBC开发,通过使用Apache Commons组件中DBUtils,DBUtils就是JDBC的简化开发工具包,同样需要项目导入
commons-dbutils-1.6.jar才能够正常使用DBUtils工具。
1.1 概述
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner类存在于Dbutils类中,QueryRunner类中方法update和query,可以实现对表的增加、删除、更新和修改操作。
其中:update(Connection conn, String sql, Object... params),用来完成表数据的增加、删除、更新操作。
query(Connection conn, String sql,ResultSetHandler<T> rsh, Object ... params),用来完成表数据的查询操作。
update方法实现增加、删除、更新和修改
添加:
public void insert(){
try {
//获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)";
Object[] params = {"股票收入", 5500, "收入"};
Connection conn = JDBCUtils.getConnection();//使用JDBCUtils工具类连接数据库
int line = qr.update(conn,sql,params);// 用来完成表数据的增加、删除、更新操作
//结果集处理
System.out.println("line = " + line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
更新:
public void update(){
try {
//创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?";
Object[] params = {"股票收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//结果集的处理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
删除:
public void delete(){
try {
//创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner();
//执行SQL语句
String sql = "DELETE FROM zhangwu WHERE name = ?";
Object[] params = {"股票收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//结果集的处理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
query方法完成表数据的查询
ResultSetHandler结果集处理类
ArrayHandler | 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
ArrayListHandler | 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 |
BeanHandler | 将结果集中第一条记录封装到一个指定的javaBean中。 |
BeanListHandler | 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
ColumnListHandler | 将结果集中指定的列的字段值,封装到一个List集合中 |
ScalarHandler | 它是用于单数据。例如select count(*) from 表操作。 |
MapHandler | 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据 |
MapListHandler | 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合 |
实例:
/*
* QueryRunner数据查询操作
* 调用QueryRunner类的方法query(Connection con,String sql,ResultSetHandler r,Object...params)
* ResultSetHandler 结果集的处理方式,传递ResultSetHandler接口实现类
* Object...params SQL语句中的?占位符
* query方法返回值,返回的是T泛型,具体返回值类型,跟随结果集处理方式变化
*/
public class QueryRunnerdemo1 {
private static Connection con = JDBCUtil.getConnection();
public static void main(String[] args) throws SQLException{
//arrayhandler();
//arraylisthandler();
//BeanHandler();
//ColumnListHandler();
//ScalarHandler();
//MapHandler();
MapListHandler();
}
/*
* 结果集第一种处理方法:ArrayHandler
* 将结果集的第一行存储到对象数组中Object[]
*/
public static void arrayhandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
//返回一个对象Object数组
Object[] result = qr.query(con, sql, new ArrayHandler());
for(Object obj : result){
System.out.print(obj+"\t");
}
}
/*
* 结果集第二种处理方法:ArrayListHandler
* 将结果集的每一行,封装到对象数组中,出现很多数组,将对象数组存储到List集合中
*/
public static void arraylisthandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
List<Object[]> result = qr.query(con, sql, new ArrayListHandler());
for(Object[] objs : result){
for(Object obj : objs){
System.out.print(obj+"\t");
}
System.out.println();
}
}
/*
* 结果集第三种处理方法:BeanHandler
* 将结果集的每一行,都封装到一个指定的JavaBean中
*/
public static void BeanHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
//调用方法,传递结果集实现类BeanHandler
Sort s = qr.query(con, sql, new BeanHandler<Sort>(Sort.class));
System.out.println(s);
}
/*
* 结果集第四种处理方法:BeanListHandler
* 将结果集的每一行,都封装到一个指定的JavaBean中,封装到list
*/
/*
* 结果集第五种处理方法:ColumnListHandler
* 将结果集中指定的列的字段值,封装到一个List集合中
*/
public static void ColumnListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("sname"));
for(Object obj : list){
System.out.println(obj);
}
}
/*
* 结果集第六种处理方法:ScalarHandler
* 它是用于单数据。例如select count(*) from 表操作。
*/
public static void ScalarHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select count(*) from sort";
long count = qr.query(con, sql, new ScalarHandler<Integer>());
System.out.println(count);
}
/*
* 结果集第七种处理方法:MapHandler
* 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
*/
public static void MapHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
Map<String,Object> map = qr.query(con, sql, new MapHandler());
for(String key : map.keySet()){
System.out.println(key+".."+map.get(key));
}
}
/*
* 结果集第八种处理方法:MapListHandler
* 将结果集每一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
*/
public static void MapListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "select * from sort";
List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());
for(Map<String,Object> map : list){
for(String key : map.keySet()){
System.out.print(key+".."+map.get(key));
}
System.out.println();
}
}
}
sort类用于使用query方法返回结果集处理类BeanListHandler和BeanHandler指定的JavaBean中
public class Sort {
private int sid;
private String sname;
private double sprice;
private String sdesc;
public Sort(int sid, String sname, double sprice, String sdesc) {
this.sid = sid;
this.sname = sname;
this.sprice = sprice;
this.sdesc = sdesc;
}
public Sort() {}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public double getSprice() {
return sprice;
}
public void setSprice(double sprice) {
this.sprice = sprice;
}
public String getSdesc() {
return sdesc;
}
public void setSdesc(String sdesc) {
this.sdesc = sdesc;
}
@Override
public String toString() {
return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice
+ ", sdesc=" + sdesc + "]";
}
}