nighty
折騰的年華
posts - 37, comments - 143, trackbacks - 0, articles - 0
導(dǎo)航
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
<
2011年2月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(7)
給我留言
查看公開留言
查看私人留言
隨筆分類
Eclipse(7)
Flex(2)
Java(6)
Struts2(2)
SWT/JFace(1)
信息安全(1)
心得(5)
操作系統(tǒng)(3)
數(shù)據(jù)庫(3)
服務(wù)器部署(5)
測試(2)
系統(tǒng)集成(2)
軟件架構(gòu)(2)
隨筆檔案
2013年4月 (2)
2013年3月 (1)
2012年4月 (1)
2011年10月 (1)
2011年8月 (1)
2011年5月 (3)
2011年4月 (1)
2011年3月 (2)
2011年2月 (1)
2011年1月 (1)
2010年11月 (1)
2009年11月 (1)
2009年10月 (1)
2009年8月 (1)
2009年7月 (1)
2008年8月 (2)
2008年7月 (2)
2008年6月 (2)
2008年5月 (4)
2008年4月 (1)
2008年1月 (1)
2007年11月 (1)
2007年10月 (2)
2007年8月 (2)
文章分類
測試
搜索
最新評論
1.?re: 關(guān)于commons dbutils組件的一個小缺陷分析
dbutils中連傳入到的參數(shù)都不區(qū)分大小寫??
--starhe
2.?re: B/S,C/S架構(gòu)混合使用[未登錄]
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--eagle
3.?re: B/S,C/S架構(gòu)混合使用[未登錄]
補(bǔ)充一下:用的語言是java,開發(fā)環(huán)境是eclipse
--eagle
4.?re: B/S,C/S架構(gòu)混合使用
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--Unbotrusive
5.?re: struts2中重定向中文參數(shù)亂碼梳理[未登錄]
有用啊
--tony
閱讀排行榜
1.?ubuntu安裝Java開發(fā)環(huán)境(38192)
2.?Eclipse3.3安裝中文語言包(13944)
3.?Http狀態(tài)碼思維導(dǎo)圖(13764)
4.?B/S,C/S架構(gòu)混合使用(13763)
5.?添加完整的Eclipse RCP幫助系統(tǒng)(8937)
評論排行榜
1.?B/S,C/S架構(gòu)混合使用(25)
2.?無奈只能放棄iBatis(24)
3.?Eclipse3.3安裝中文語言包(13)
4.?httpclient3.1使用小結(jié)(8)
5.?JDBC連接DB2的一些總結(jié)(8)
關(guān)于commons dbutils組件的一個小缺陷分析
Posted on 2011-02-12 17:33
寒武紀(jì)
閱讀(3028)
評論(7)
編輯
收藏
所屬分類:
數(shù)據(jù)庫
、
Java
非常喜歡這種輕量級的JDBC封裝,比起Hibernate和iBatis,可以非常自由和靈活地運(yùn)用和自行二次封裝,由于dbutils的BeanHandler轉(zhuǎn)換方式采取了反射技術(shù),在性能上肯定有所損失,所以項目中基本上都使用MapHandler方式來轉(zhuǎn)換數(shù)據(jù),當(dāng)然就是自己寫的代碼多一點(diǎn),也無所謂。一般的查詢、子查詢、聯(lián)合查詢、包括視圖查詢等等都很正常,但是發(fā)現(xiàn)一個比較小的問題,就是在使用聚合函數(shù)的場所,例如:select user_type, count(*) as count from `user` group by user_type這種類型查詢的時候,MapHandler方式不起作用,as列都變成key為空串的K-V對,導(dǎo)致有許多地方使用map.get("")代碼的情況出現(xiàn),這種寫法當(dāng)然是不太好的,容易出問題。
鑒于前面沒有時間了解,就都粗略使用了上面那種粗暴的map.get("")來處理,最好的情況是讓dbutils組件能自動識別到as類型的列名。于是有空了就專門看了看它的源代碼,發(fā)現(xiàn)最主要的一段代碼如下:
1
public
Map
<
String, Object
>
toMap(ResultSet rs)
throws
SQLException
{
2
Map
<
String, Object
>
result
=
new
CaseInsensitiveHashMap();
3
ResultSetMetaData rsmd
=
rs.getMetaData();
4
int
cols
=
rsmd.getColumnCount();
5
6
for
(
int
i
=
1
; i
<=
cols; i
++
)
{
7
result.put(rsmd.getColumnName(i), rs.getObject(i));
8
}
9
10
return
result;
11
}
CaseInsensitiveHashMap是dbutils自定義的一個Map,忽略鍵大小寫的K-V字典,但是key使用的是ResultSetMetaData.getColumnName(),我想問題大概出在這里,于是認(rèn)真翻了翻java的api文檔(開發(fā)做久了容易遺忘基礎(chǔ)),果然,原來
getColumnName()
是:
獲取指定列的名稱;
而as關(guān)鍵字之后,使列名稱變成用于顯示的意義,這個時候應(yīng)該使用
getColumnLabel
():
獲取用于打印輸出和顯示的指定列的建議標(biāo)題。建議標(biāo)題通常由 SQL
AS
子句來指定。如果未指定 SQL
AS
,則從
getColumnLabel
返回的值將和
getColumnName
方法返回的值相同
。自己手動試驗了一下,果然如所料,問題就出在這里。
所以呢,如果想要dbutils在自動轉(zhuǎn)換Map及MapList時能識別聚合函數(shù)的列名,那么最好的做法就是重載這種方式,懶一點(diǎn)的,你就干脆修改上面那段代碼,讓它判斷是否使用了as關(guān)鍵字。個人暫時搞不清楚官方為什么沒有考慮這一步,有時間再思考一下!
剛進(jìn)場的時候戲就落幕
Feedback
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-12 20:22 by
蒙奇奇
關(guān)注
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-13 19:30 by
javafan
本來就是一個Bug,無法識別別名,低版本沒問題
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-14 13:56 by
retry
什么版本? 是 1.3 么?
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-14 18:08 by
寒武紀(jì)
@retry
是的,就是1.3
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-19 12:21 by
jacklondon
我也用 dbutils 進(jìn)行二次封裝成 VelocityWeb, 也用 as , 沒有發(fā)現(xiàn)這個 bug。 可能是因為我攔截了 map , 因為我的需求比較特別:
user_name (數(shù)據(jù)庫列名) 要映射到 userName( java 屬性名), 而 DBUtils 做不到,所以我攔截了重寫,可能是因為這樣,導(dǎo)致沒有了這個 bug.
----------歡迎大家試用我們的單點(diǎn)登錄
http://zhegui.biz
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2011-02-19 12:25 by
jacklondon
DBUtils 1.3 的 release log 中有如下一段話,按說已經(jīng)解決問題了:
BeanProcessor#mapColumnsToProperties now prefers to use column labels over column names (where aliases are not set, these should be identical) Fixes DBUTILS-57.
你這邊用什么數(shù)據(jù)庫?是否 JDBC 驅(qū)動有問題,需要升級?
#
re: 關(guān)于commons dbutils組件的一個小缺陷分析
回復(fù)
更多評論
2016-05-02 20:35 by
starhe
dbutils中連傳入到的參數(shù)都不區(qū)分大小寫??
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
Ubuntu Server 12.10 Mysql的主從復(fù)制筆記
擴(kuò)展commons dbutils的JavaBean轉(zhuǎn)換方式
關(guān)于commons dbutils組件的一個小缺陷分析
Powered by:
BlogJava
Copyright © 寒武紀(jì)
主站蜘蛛池模板:
亚洲精品无码少妇30P
|
图图资源网亚洲综合网站
|
ZZIJZZIJ亚洲日本少妇JIZJIZ
|
亚洲人成色77777在线观看大
|
1000部羞羞禁止免费观看视频
|
日本免费人成在线网站
|
女人18毛片水真多免费播放
|
四虎在线视频免费观看
|
亚洲精品乱码久久久久久不卡
|
国产亚洲精品资源在线26u
|
91精品国产亚洲爽啪在线影院
|
jiz zz在亚洲
|
视频免费1区二区三区
|
国产一级淫片a免费播放口
|
欧美男同gv免费网站观看
|
国产色爽女小说免费看
|
亚洲乱码中文字幕久久孕妇黑人
|
久久丫精品国产亚洲av不卡
|
亚洲日韩AV无码一区二区三区人
|
人体大胆做受免费视频
|
99久久国产免费中文无字幕
|
在线观看永久免费视频网站
|
亚洲热线99精品视频
|
亚洲一级毛片免费观看
|
日本一区二区三区免费高清在线
|
精品视频在线免费观看
|
成年女人毛片免费播放视频m
|
亚洲午夜精品第一区二区8050
|
亚洲国产精品自在在线观看
|
亚洲人成网站在线播放2019
|
CAOPORN国产精品免费视频
|
在线看片无码永久免费视频
|
久久99亚洲综合精品首页
|
亚洲成人在线免费观看
|
日本一区二区三区在线视频观看免费
|
亚洲综合小说另类图片动图
|
久久嫩草影院免费看夜色
|
国产精品69白浆在线观看免费
|
在线观看亚洲成人
|
亚洲一级大黄大色毛片
|
精品多毛少妇人妻AV免费久久
|