解决:DButils QueryRunner count(*) JavaBean里封装的结果集 返回null 或者返回 0
来源:互联网 发布:淘宝有国际版 编辑:程序博客网 时间:2024/05/16 03:25
当你的结果集是一下两种情况时:
化妆品:0
家电:0服饰:0
或
化妆品:null家电:null服饰:null
你可能出现这个错误:
JavaBean中的字段名与数据库中字段名不一致。
我要:使用聚合函数,返回每一个分类里的商品数。下图这种效果。
化妆品1家电3服饰1
输出:结果集为文章开头那两种。
存在Bug代码:count(*) 改成count(*) as num
@Test public void TestCount(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// Sql String sql = "select cname ,count(*) from product inner join category on category_id=cid group by cname;";// 执行 try {// 使用javabean List<CountJavaBean> list = queryRunner.query(sql,new BeanListHandler<>(CountJavaBean.class)); for (CountJavaBean countJavaBean :list){ System.out.println(countJavaBean); }// 使用MapMapListHandler// List<Map<String,Object>> list = queryRunner.query(sql,new MapListHandler());// for (Map<String,Object> getKey : list){// for(String rsKey : getKey.keySet()){// Object value = getKey.get(rsKey);// System.out.print(value+" ");// }// System.out.println();// } } catch (SQLException e) { e.printStackTrace(); } }
JavaBean:结果集出现null,是因为JavaBean字段num类型设置为Object,而数据库里没有num这个字段,所以只能返回null
结果集出现0,是因为JavaBean字段num类型设置为int,而数据库里没有num这个字段,所以只能返回0.
package jUnit;import java.io.Serializable;public class CountJavaBean implements Serializable{ private String cname;// get经验// javabean里的字段名必须跟数据库里的字段名一样.至于javabean里的字段类型,随你咯,只要你开心用什么类型无所谓了.// 比如count(*)在数据库里返回的值对应java里的long类型// 但是我有JavaBean大哥,只要我的字段名和数据库里的一样,至于传成什么类型,看大哥JavaBean的字段类型.听大哥的话.好办事. private Object num; public CountJavaBean(){ super(); } public void setCname(String cname) { this.cname = cname; } public void setNum(Object num) { this.num = num; } public String getCname() { return cname; } public Object getNum() { return num; } @Override public String toString() { return cname+":"+num; }}修改后:package jUnit;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.*;import org.junit.Test;import java.sql.SQLException;import java.util.List;import java.util.Map;import java.util.Set;import static toolutils.DBCPUtils.getDataSource;/** dbutils工具类测试* */public class DBUtilsTest { @Test /*查询一条记录*/ public void select(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// sql String sql = "select pid , pname from product where pid = ?";// 参数 Object[] param = {"p001"};// 执行 try { Object[] result = queryRunner.query(sql, new ArrayHandler(),param); for (Object obj : result){ System.out.print(obj); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询失败"+e); } } @Test /*插入*/ public void insert(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// sql String sql = "insert into product values(?,?,?,?)";// 参数 Object[] param = {"null","山大地维","3500","c004"};// 执行 try { int row = queryRunner.update(sql,param); System.out.println("插入成功"+row+"条"); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("插入失败"+e); } } @Test /*删除*/ public void delete(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// Sql String sql = "delete from product where pid=?";// 参数 String param = "null";// 执行 try { int row = queryRunner.update(sql,param); System.out.println("删除"+row+"行"); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("删除失败"+e); } } @Test /* * 查询所有记录*/ public void selectAll(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// sql String sql = "select pid,pname,price,category_id from product";// 执行 try {// 获取Object// List<Object[]> rs = queryRunner.query(sql, new ArrayListHandler());// // for (Object[] getObjParamRs : rs){// for (Object getObj :getObjParamRs){// System.out.print(getObj);// }// System.out.println();// }// 通过BeanListHandler获取对象 List<Product> rs = queryRunner.query(sql,new BeanListHandler<Product>(Product.class)); for (Product getRs : rs){ System.out.println(getRs); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询所有失败"+e); } } @Test /*总记录数 * */ public void count(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// sql String sql = "select count(*) from product";// 执行 try { Long num = queryRunner.query(sql,new ScalarHandler<Long>()); System.out.println(num); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("count查询失败"+e); } } @Test public void TestCount(){// 核心类 QueryRunner queryRunner = new QueryRunner(getDataSource());// Sql String sql = "select cname ,count(*)as num from product inner join category on category_id=cid group by cname;";// 执行 try {// 使用javabean List<CountJavaBean> list = queryRunner.query(sql,new BeanListHandler<>(CountJavaBean.class)); for (CountJavaBean countJavaBean :list){ System.out.println(countJavaBean); }// 使用MapMapListHandler// List<Map<String,Object>> list = queryRunner.query(sql,new MapListHandler());// for (Map<String,Object> getKey : list){// for(String rsKey : getKey.keySet()){// Object value = getKey.get(rsKey);// System.out.print(value+" ");// }// System.out.println();// } } catch (SQLException e) { e.printStackTrace(); } }}package jUnit;import java.io.Serializable;public class CountJavaBean implements Serializable{ private String cname;// get经验// javabean里的字段名必须跟数据库里的字段名一样.至于javabean里的字段类型,随你咯,只要你开心用什么类型无所谓了.// 比如count(*)在数据库里返回的值对应java里的long类型// 但是我有JavaBean大哥,只要我的字段名和数据库里的一样,至于传成什么类型,看大哥JavaBean的字段类型.听大哥的话.好办事. private int num; public CountJavaBean(){ super(); } public void setCname(String cname) { this.cname = cname; } public void setNum(int num) { this.num = num; } public String getCname() { return cname; } public int getNum() { return num; } @Override public String toString() { return cname+":"+num; }}
阅读全文
0 0
- 解决:DButils QueryRunner count(*) JavaBean里封装的结果集 返回null 或者返回 0
- mybatis mysql count(*) 返回结果为null的解决
- QueryRunner(DbUtils) 结果集实例
- dbUtils.findAll(Person.class)返回结果为NULL
- mybatis mysql int 返回结果为null的解决
- getLastKnownLocation()返回null的解决
- getLastKnownLocation()返回null的解决
- mybatis返回对象为null或者0的问题
- ajax 返回封装之后的结果
- MAP getLastKnownLocation()返回null的解决
- Android GPS getLastKnownLocation()返回null的解决
- getSupportActionBar() 函数总是返回 null 的解决
- MAP getLastKnownLocation()返回null的解决
- oracle与sqlserver执行count(*)返回的结果兼容
- Atitti dbutil获取多个返回结果集的解决
- mysql开发存储过程中,select结果集再动态的条件下select count(*)统计返回都为0问题解决
- mysql的null数据,c++返回的结果判断
- 返回零长度的数组或者集合,而不是null
- QT按钮被触发两次的问题
- Fresco三级缓存
- 数据库存储BloB格式图片,并从数据库中取出显示到页面中
- ccf-2016121-中间数
- Power Strings
- 解决:DButils QueryRunner count(*) JavaBean里封装的结果集 返回null 或者返回 0
- MVP详解
- Location对象
- Tensorflow载入数据的三种方式
- C语言-求三个数中的最大值
- c语言学习——字符数组与字符串的使用详解
- JSP指令,动作标签,内置对象
- SSL2520 2014年汕头市选拔赛普级组 小球(math)
- 用PYTHON实现一个扁平化的字典,如{'a': {'b': '1'}}扁平化处理后变成{'a.b': 1}?