1.DBUtils封装了对JDBC的操作,简化了JDBC操作,可以减少代码量。
2.Dbutils三个核心功能
- QueryRunner中提供对sql语句操作(update,query)
- ResultSetHandler接口,用于定义select操作后,封装结果集
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
3.QueryRunner类
QueryRunner类提供数据源(连接池),DButils底层自动维护连接connection。
1.update(String sql, Object... params)执行更新数据(可变参数)
2.query(String sql, ResultSetHandler<T> rsh,Object... params)执行查询(可变参数)
4.ResultSetHandler 结果集处理类
- ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值(只获取一条数据)。
- ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
- BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
- BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。
- 其他详见dbutils API。
5.代码实现
package lesson15_jdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import java.util.List; import java.sql.SQLException; import java.util.Arrays; public class jdbc_FZ3 { //单个查询 ArrayHandler public static void chaXun(){ try{ //连接数据库 ComboPooledDataSource ds=new ComboPooledDataSource(); //创建QueryRnner QueryRunner qr=new QueryRunner(ds); //sql语句 String sql="select * from 1_mytable1"; //query执行sql语句 Object[] query=qr.query(sql,new ArrayHandler()); //执行结果 System.out.println(Arrays.toString(query)); ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //多个查询 (ArrayListHandler) public static void chaXunAll(){ try { //连接到数据库 ComboPooledDataSource ds = new ComboPooledDataSource(); //创建QueryRunner QueryRunner qr = new QueryRunner(ds); //sql语句 String sql = "select * from 1_mytable1"; //query执行sql语句 List<Object[]> query = qr.query(sql, new ArrayListHandler()); //查询结果 for (Object[] item : query){ System.out.println(Arrays.toString(item)); } }catch (SQLException e){ e.printStackTrace(); } } //封装到javabean中 public static void chaxun2(){ try { ComboPooledDataSource ds = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(ds); String sql = "select * from 1_mytable1"; Info query = qr.query(sql, new BeanHandler<>(Info.class)); String name=query.getName(); int age=query.getAge(); String gender=query.getGender(); System.out.println(name+"->"+age+"->"+gender); ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //多个查询 (BeanListHandler) public static void chaXunAll2(){ try{ ComboPooledDataSource ds=new ComboPooledDataSource(); QueryRunner qr=new QueryRunner(ds); String sql="select * from 1_mytable1"; List<Info> query=qr.query(sql,new BeanListHandler<>(Info.class)); for (Info item:query){ String name=item.getName(); int age = item.getAge(); String gender=item.getGender(); System.out.println(name+"->"+age+"->"+gender); } ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //插入 public static void insert(){ ComboPooledDataSource ds=new ComboPooledDataSource(); QueryRunner qr=new QueryRunner(ds); String sql="insert into 1_mytable1(name,age,gender) values(?,?,?)"; try{ int i=qr.update(sql,"三少爷",45,"男"); System.out.println(i); }catch (SQLException e){ e.printStackTrace(); } } public static void main(String[] args) { chaXun(); insert(); } }5.输入中文乱码问题,设置java文件编码,sql与jdbc连接的编码,sql数据库的编码统一为utf-8即可解决。