Dbutils简单使用
Dbutils是apache基于jdbc封装的操作数据库的包,在保证性能的同时操作更加的简洁。
有两个主要的类QueryRunner类和ResultSetHandler接口,QueryRunner主要用于数据库的操作 update方法用于增删改 query用于查询;
QueryRunner类
构造方法
QueryRunner qr =new QueryRunner(); 使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式
QueryRunner qr= new QueryRunner(DataSource dataSource); 使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式
常用方法
int=qr.update(Connection con ,String sql ,Param) 数据库的增删改
参数一:连接池对象(这个在无参构造的时候使用)
参数二:sql语句
参数三:可变参数(就是sql占位符的值)
返回值:int类型的 返回受影响的行数
package db; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import java.sql.SQLException; public class TestDbutils { public static void main(String[] args) throws SQLException { ComboPooledDataSource dataSource=new ComboPooledDataSource();//不写取默认的配置 QueryRunner qr=new QueryRunner(dataSource); String sql="update oak_test set uid=1 where uid=?;"; int a =qr.update(sql,"123451"); } }
query(Connection con,String sql ,Param ...,ResultSetHandler)
该方法用于出查询操作
参数一:Connection 数据库连接对象, 使用带参构造时可以不用
参数二:sql语句
参数三:表示对结果集的处理方式 (ResultSetHandler接口)
参数四:可变参数(就是sql占位符的值)
ResultSetHandler接口用于数据库查询结果的整合
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。//重点
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。//重点
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。//重点
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List //重点
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
ScalarHandler:将结果集第一行的某一列放到某个对象中。//重点
package db; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.*; import java.sql.SQLException; import java.util.List; import java.util.Map; public class TestDbutils { public static void main(String[] args) throws SQLException { ComboPooledDataSource dataSource=new ComboPooledDataSource();//不写取默认的配置 QueryRunner qr=new QueryRunner(dataSource); String sql="select * from oak_test ;"; // TestDbutils.testArrayHandler(sql,qr); // TestDbutils.testArrayListHandler(sql,qr); // TestDbutils.testbeanHandler(sql,qr); // TestDbutils.testbeanListHandler(sql,qr); // TestDbutils.testMapHandler(sql,qr); // TestDbutils.testMapListHandler(sql,qr); TestDbutils.testScalarHanddler(sql,qr); } //ArrayHandler将第一列的数据转化成一个对象数据[object1,object2,object3] public static void testArrayHandler (String sql,QueryRunner qr) throws SQLException{ Object result[]=qr.query(sql,new ArrayHandler()); //数组中存放 String类型的1 Integer类型的15和String类型的1111111 for(Object o:result){ System.out.println(o); } } //ArrayListHandler将结果的数据转化成多个对象数据[object1,object2,object3],在存放到List中 public static void testArrayListHandler (String sql,QueryRunner qr) throws SQLException{ List<Object[]> result=qr.query(sql,new ArrayListHandler()); //先循环集合List得到一个数组 在循环数组中的每个对象的值 for(Object[] list:result){ for(Object o:list){ System.out.println(o); } } } //beanHandler和beanListHandler返回的值比较简单 所以这两种方法相对使用的多一些 //beanHandler将结果集中的第一行数据封装到一个对应的JavaBean实例中 这里的JavaBean指根据数据库表创建的类的对象 public static void testbeanHandler (String sql,QueryRunner qr) throws SQLException{ //返回的是一个对象 DbUser dbuser=(DbUser)qr.query(sql,new BeanHandler(DbUser.class)); System.out.println(dbuser.getUid()); System.out.println(dbuser.getLoginname()); System.out.println(dbuser.getLoginpass()); } //beanListHandler将结果集中每一行数据封装到一个对应的JavaBean实例中 在把所有的实例存放到list中 public static void testbeanListHandler (String sql,QueryRunner qr) throws SQLException{ //返回的是一个DbUser对象组成的集合 List<DbUser> list=(List)qr.query(sql,new BeanListHandler(DbUser.class)); for(DbUser user:list){ System.out.println(user.getUid()); } } //MapHandler将结果第一行封装到一个Map里 key是列名 value是对应的值 public static void testMapHandler(String sql,QueryRunner qr) throws SQLException{ Map result=qr.query(sql,new MapHandler()); System.out.println(result); } //MapListHandler将结果每一行封装到一个Map里 key是列名 value是对应的值 在存放到List中 public static void testMapListHandler(String sql,QueryRunner qr) throws SQLException{ List result=qr.query(sql,new MapListHandler()); System.out.println(result); } //将结果集第一行的某一列放到某个对象 public static void testScalarHanddler(String sql,QueryRunner qr) throws SQLException{ Object o=qr.query(sql,new ScalarHandler(2)); System.out.println(o); } }