本文只关于如何输出到java,不涉及数据库连接,bean类创建使用的教学。需要完整java连接数据库,到用bean取出数据的,自行度娘搜索。
结果如下(部分,字段太多,截不全,下图为失败案例。):
关于mysql怎么用group_concat 分组,网上有很多教程,这里不再赘述。
假设我们拥有以上数据,这个时候需要对颜色分组。以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";
验证一下语句正不正确:
上图正确。其中goodsCode字段错误,作为参考对比。不过本身没数据,在这里也无所谓。
假设有 searchSql 方法(自己实现),可以查询sql语句并返回List列表。
首先要有一个bean去接收。
public class GoodsBean{
/*如果数据库字段类型为bigint,要对应为java的bigint,注意需要设置为无符号,否则要对应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;//因为不是单个输出,是集合输出,所以字段price的decimal在bean里变成String去获得集合。
//set和get自己生成。
}
开始用searchSql函数。
List<GoodsBean> goodsBean =new ArrayList<GoodsBean>();
goodsBean = (List<GoodsBean>) searchSql(sql);
其实本文重点在于
GROUP_CONCAT(CONVERT(size,char)) size 类似这样的句子。
之前我不会用这个sql函数,一直是类似这么用的
GROUP_CONCAT(CONVERT(size,char)),就是第三张图显示的GROUP_CONCAT(goodsCode)字段效果,不过有数据,不能获取到。网上说是Blob类型获取。不得而知。没试过。
这样的结果导致对应到bean的size变量一直为空,也就是取不到数据。就是第二张图显示的,没有size字段。只有GROUP_CONCAT(CONVERT(size,char))字段
正确用法是
GROUP_CONCAT(CONVERT(size,char)) size
在命令窗口输出,会包含GROUP_CONCAT(CONVERT(size,char)) 和size两个字段。
如果java获取。反正前者我获取不到数据。size对应bean里的String size;是字符串。
group by color 这句也是很重要的,没有这句,就没有分组的依据。只会输出一个颜色。并且会把符合条件的其他颜色的记录 全部加到那个颜色上。
CONVERT,CAST用法,度娘。
最后拿到的String数据,自己要怎么处理就怎么处理,不再赘述。