其實是個非常簡單的問題,但是這玩意兒弄得我很難受,又浪費了一個下午的時間,簡直了……
問題大概是,我在查詢數據庫時,查詢的結果有兩個,一個是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>來接就沒問題了,也能正常的取出值了。