欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

返回: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

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

这样就解决问题了!

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

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