Mysql中使用GROUP_CONCAT()函数会出现:BLOB问题的解决?利用cast函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013456370/article/details/82462046

描述:最近在学习Jfinal框架,就在网上搜了一个例子来进行学习;

但是,启动服务器,访问项目的时候,发现控制台报错:[B cannot be cast to java.lang.String

最后,经过代码查看发现不是代码的问题,运用mysql的语法:

DROP TABLE IF EXISTS `auth_user_role`;
CREATE TABLE `auth_user_role` (
  `user_id` int(11) unsigned NOT NULL,
  `role_id` int(11) unsigned NOT NULL,
  `user` int(11) unsigned default NULL COMMENT '操作人',
  PRIMARY KEY  USING BTREE (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户角色中间表';

INSERT INTO `auth_user_role` VALUES (1,1,1);
INSERT INTO `auth_user_role` VALUES (1,7,1);
INSERT INTO `auth_user_role` VALUES (1,8,1);
INSERT INTO `auth_user_role` VALUES (1,9,1);
INSERT INTO `auth_user_role` VALUES (3,8,1);
INSERT INTO `auth_user_role` VALUES (4,9,1);
DROP TABLE IF EXISTS `auth_role`;
CREATE TABLE `auth_role` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `role_name` varchar(255) default NULL COMMENT '角色名称',
  `role_desc` varchar(255) default NULL COMMENT '角色描述',
  `sort` int(11) default NULL COMMENT '排序号',
  `create_time` datetime default NULL COMMENT '创建时间或者更新时间',
  `last_edit_time` datetime default NULL,
  PRIMARY KEY  USING BTREE (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='角色';

INSERT INTO `auth_role` VALUES (1,'管理员','分配所有权限',0,'2018-06-20 20:16:26','2018-06-20 20:16:28');
INSERT INTO `auth_role` VALUES (7,'普通用户','普通用户',1,'2018-06-27 20:54:33',NULL);
INSERT INTO `auth_role` VALUES (8,'内容管理员','内容cms用户',2,'2018-06-27 20:54:52',NULL);
INSERT INTO `auth_role` VALUES (9,'基础数据维护','基础数据维护',3,'2018-06-27 20:55:21',NULL);

上面是两个表的sql语句:

在mysql工具中:运行sql语句:

use my_curd;

SELECT
                 group_CONCAT(sur.role_id) AS roleIds,
                 GROUP_CONCAT(sr.role_name) AS roleNames
                 FROM auth_user_role sur
                 LEFT JOIN auth_role sr ON sur.role_id = sr.id
                 WHERE user_id = 1 
                 GROUP BY sur.user_id

返回:BLOB类型的,就有问题了,在Java代码中,处理就会报错;

于是,就百度尝试了好久;最终,把sql语句修改为如下:

use my_curd;

SELECT
                cast(GROUP_CONCAT(sur.role_id) as char) AS roleIds,
                 GROUP_CONCAT(sr.role_name) AS roleNames
                 FROM auth_user_role sur
                 LEFT JOIN auth_role sr ON sur.role_id = sr.id
                 WHERE user_id = 1 
                 GROUP BY sur.user_id

这样就解决问题了!

CAST函数语法规则是:Cast(字段名 as 转换的类型 ),其中类型可以为:

CHAR[(N)] 字符型 
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型

猜你喜欢

转载自blog.csdn.net/u013456370/article/details/82462046