Mysql中使用GROUP_CONCAT()函数会出现:BLOB问题的解决?利用cast函数
程序员文章站
2024-03-20 08:45:52
...
描述:最近在学习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 时间型