其实是个非常简单的问题,但是这玩意儿弄得我很难受,又浪费了一个下午的时间,简直了……
问题大概是,我在查询数据库时,查询的结果有两个,一个是varchar格式的字段,一个int格式字段,例如:
select name,count(*) as num from student group by friend;
获取结果的时候,我将返回值类型设置为了HashMap,接受用的是List<HashMap<String,String>>,事实上这种方法能够接收到数据,而且遍历List时通过toString()方法也可以正常输出,例如:{name=A, num=20}
但是这么做的问题是,(例)当我尝试取出Map中的age字段时,就会报错,提示:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
告知我不能进行类型转换(long --> String)。遇到这个错误之后我浪费了很长一段时间来处理,最后才意识到可能是返回值类型不同造成的问题,我本以为int类型的返回值用Map<String,String>接收之后就可以被强转为String,但是显然不是这样,因此要么换一种接收方式(实体类),要么就转换类型。
这样的话问题就简单多了,在查询的时候加一个类型转换,将参数中的int转换为String(char)就好了(实体类太麻烦了)。
mysql中类型转换的函数有两种:
1)CAST(value as type) 就是CAST(xxx AS 类型)
2)CONVERT(value, type) 就是CONVERT(xxx,类型)
如下:
select name,convert(count(*),char) as num from student group by friend;
这样用Map<String,String>来接就没问题了,也能正常的取出值了。