本文不涉及mysql的配置,bean的创建和使用,数据库连接等教程,仅介绍group_concat输出到java
假设我们有如下数据
目标:输出goodsId为1002,已颜色分组的数据。
首先编辑一下sql语句
String sql ="SELECT serialNumber,goodsId,fatherGoodsId,"
+ "GROUP_CONCAT(goodsCode) goodsCode,color,GROUP_CONCAT(CONVERT(size,char)) size,GROUP_CONCAT(CONVERT(stock,char)) stock,"
+ "GROUP_CONCAT(CONVERT(price,char)) price,FROM goods_tb WHERE goodsId=1002 group by color";
然后假设有个bean
public class GoodsBean {
//如果数据库里的字段类型为bigint。要对应到java的BigInteger,字段需要设置无符号。如果是有符号,对应java使用 long类型去接收。
private BigInteger serialNumber;
private String color;
private int goodsId;
private int fatherGoodsId;
private String goodsCode;
private String size;
private String stock;
private String price;//因为分组返回的是集合结果,是字符串,不是单个的数据,所以集合用String接收
//set和get这里不写了。自己写
}
重点在于GROUP_CONCAT(CONVERT(size,char)) size类似如此的语句。
如果sql语句中只有GROUP_CONCAT(CONVERT(size,char)) 这样的。没有size。那么bean接收不到数据,
以String size变量为例:
当GROUP_CONCAT(CONVERT(size,char)) 这样的语句在命令界面中输出显示为:
这样的结果集,上图显示的GROUP_CONCAT(CONVERT(size,char)) ,用bean接收为空对象。也就是获取不到数据。网上说返回的是Blob类型,本人没试过,不清楚。
正确的语句GROUP_CONCAT(CONVERT(size,char)) size输出结果为
GROUP_CONCAT(CONVERT(size,char)) size 语句只是保证了输出数据的正确性。
真正分组的语句是group by color
如果没有group by color。命令界面显示的结果 只有一个颜色的记录。
从上图看出,size字段输出并不是我们想要的。它包含了另一个颜色的size数据。
我们知道了如何输出可以在java获取到的语句。就可以用bean接收了。
假设有个函数 searchSql 形参为String sql。返回类型为list。
public List<GoodsBean> searchSql (String sql){
List<GoodsBean> mGoodsBean;
//连接数据库,查询
//对应到bean代码
return mGoodsBean;
}
那么我们就可以这么写
List<GoodsBean> goodsBean = new ArrayList<GoodsBean>();
goodsBean = (List<GoodsBean>) searchSql(sql);
顺便提一下。
如果想要所有组合字段输出结果,都是按照一种排序方式。
比如说都是按照ORDER BY size DESC.,按size字段降序排序
那么你要在 sql语句中出现group_concat 的地方都加上ORDER BY size DESC
GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size GROUP_CONCAT(CONVERT(stock,char) ORDER BY size DESC) stock
若只设置GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size ,其他group_concat的地方不设置。那么设置的字段会排序,其他字段不会排序。
关于如何详细使用group_concat ,自行度娘。不再赘述。
本文为会心烦博客原创,转载注明处出!