问题场景:
查询数据库时,返回结果有两个字段,一个是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类型的返回值用HashMap<String,String>接收之后就可以被强转为String,但是显然不是这样,因此要么换一种接收方式(实体类),要么就转换类型。
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;
这样用HashMap<String,String>来接就没问题了,也能正常的取出值了。
如果是oracle数据库,注意函数的使用上会有一些区别,但是原理和方法相同。