【夏弈的問題記錄】MyBatis查詢數據庫返回多個不同類型參數的結果集的接收方式


其實是個非常簡單的問題,但是這玩意兒弄得我很難受,又浪費了一個下午的時間,簡直了……

問題大概是,我在查詢數據庫時,查詢的結果有兩個,一個是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>來接就沒問題了,也能正常的取出值了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM