中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Java程序員在寫SQL程序時候常犯的10個錯誤
來源:易賢網 閱讀:979 次 日期:2014-09-05 12:01:08
溫馨提示:易賢網小編為您整理了“Java程序員在寫SQL程序時候常犯的10個錯誤”,方便廣大網友查閱!

Java程序員編程時需要混合面向對象思維和一般命令式編程的方法,能否完美的將兩者結合起來完全得依靠編程人員的水準:

技能(任何人都能容易學會命令式編程)

模式(有些人用“模式-模式”,舉個例子,模式可以應用到任何地方,而且都可以歸為某一類模式)

心境(首先,要寫個好的面向對象程序是比命令式程序難的多,你得花費一些功夫)

但當Java程序員寫SQL語句時,一切都不一樣了。SQL是說明性語言而非面向對象或是命令式編程語言。在SQL中要寫個查詢語句是很簡單的。但在Java里類似的語句卻不容易,因為程序員不僅要反復考慮編程范式,而且也要考慮算法的問題。

下面是Java程序員在寫SQL時常犯的錯誤(沒有特定的順序):

1.忘掉NULL

Java程序員寫SQL時對NULL的誤解可能是最大的錯誤。也許是因為(并非唯一理由)NULL也稱作UNKNOWN。如果被稱作UNKNOWN,這還好理解些。另一個原因是,當你從數據庫拿東西或是綁定變量時,JDBC將SQL NULL 和Java中的null對應了起來。這樣導致了NULL = NULL(SQL)和null=null(Java)的誤解。

對于NULL最大的誤解是當NULL被用作行值表達式完整性約束條件時。

另一個誤解出現在對于NULL 在 NOT IN anti-joins的應用中。

解決方法:

好好的訓練你自己。當你寫SQL時要不停得想到NULL的用法:

這個NULL完整性約束條件是正確的?

NULL是否影響到結果?

2.在Java內存中處理數據

很少有Java開發(fā)者能將SQL理解的很好.偶爾使用的JOIN,還有古怪的UNION,好吧.但是對于窗口函數呢?還有對集合進行分組呢?許多的Java開發(fā)者將SQL數據加載到內存中,將這些數據轉換成某些相近的集合類型,然后再那些集合上面使用邊界循環(huán)控制結構(至少在Java8的集合升級以前)執(zhí)行令人生厭的數學運算.

但是一些SQL數據庫支持先進的(而且是SQL 標準支持的!)OLAP特性,這一特性表現更好而且寫起來也更加方便.一個(并不怎么標準的)例子就是Oracle超棒的MODEL分句.只讓數據庫來做處理然后只把結果帶到Java內存中吧.因為畢竟所有非常聰明的家伙已經對這些昂貴的產品進行了優(yōu)化.因此實際上,通過將OLAP移到數據庫,你將獲得一下兩項好處:

便利性.這比在Java中編寫正確的SQL可能更加的容易.

性能表現.數據庫應該比你的算法處理起來更加快.而且更加重要的是,你不必再去傳遞數百萬條記錄了.

完善的方法:

每次你使用Java實現一個以數據為中心的算法時,問問自己:有沒有一種方法可以讓數據庫代替為我做這種麻煩事.

3. 使用UNION代替UNION ALL

太可恥了,和UNION相比UNION ALL還需要額外的關鍵字。如果SQL標準已經規(guī)定了支持,那么可能會更好點。

UNION(允許重復)

UNION DISTINCT (去除了重復)

移除重復行不僅很少需要(有時甚至是錯的),而且對于帶很多行的大數據集合會相當慢,因為兩個子select需要排序,而且每個元組也需要和它的子序列元組比較。

注意即使SQL標準規(guī)定了INTERSECT ALL和EXCEPT ALL,很少數據庫會實現這些沒用的集合操作符。

處理方法:

每次你寫UNION語句時,考慮實際上是否需要UNION ALL語句。

4.通過JDBC分頁技術給大量的結果進行分頁操作

大部分的數據庫都會支持一些分頁命令實現分頁效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH語句等。即使沒有支持這些語句的數據庫,仍有可能對ROWNUM(甲骨文)或者是ROW NUMBER() OVER()過濾(DB2,SQL Server2008等),這些比在內存中實現分頁更快速。在處理大量數據中,效果尤其明顯。

糾正:

僅僅使用這些語句,那么一個工具(例如JOOQ)就可以模擬這些語句的操作。

5.在java內存中加入數據

從SQL的初期開始,當在SQL中使用JOIN語句時,一些開發(fā)者仍舊有不安的感覺。這是源自對加入JOIN后會變慢的固有恐懼。假如基于成本的優(yōu)化選擇去實現嵌套循環(huán),在創(chuàng)建一張連接表源前,可能加載所有的表在數據庫內存中,這可能是真的。但是這事發(fā)生的概率太低了。通過合適的預測,約束和索引,合并連接和哈希連接的操作都是相當的快。這完全是是關于正確元數據(在這里我不能夠引用Tom Kyte的太多)。而且,可能仍然有不少的Java開發(fā)人員加載兩張表通過分開查詢到一個映射中,并且在某種程度上把他們加到了內存當中。

糾正:

假如你在各個步驟中有從各種表的查詢操作,好好想想是否可以表達你的查詢操作在單條語句中。

6.在一個臨時的笛卡爾積集合中使用 DISTINCT 或 UNION 消除重復項

通過復雜的連接,人們可能會對SQL語句中扮演關鍵角色的所有關系失去概念。特別的,如果這涉及到多列外鍵關系的話,很有可能會忘記在JOIN .. ON子句中增加相關的判斷。這會導致重復的記錄,但或許只是在特殊的情況下。有些開發(fā)者因此可能選擇DISTINCT來消除這些重復記錄。從三個方面來說這是錯誤的:

它(也許)解決了表面癥狀但并沒有解決問題。它也有可能無法解決極端情況下的癥狀。

對具有很多列的龐大的結果集合來說它很慢。DISTINCT要執(zhí)行ORDER BY操作來消除重復。

對龐大的笛卡爾積集合來說它很慢,還是需要加載很多的數據到內存中。

解決方法:

根據經驗,如果你獲得了不需要的重復記錄,還是檢查你的JOIN判斷吧。可能在某個地方有一個很難覺察的笛卡爾積集合。

7. 不使用MERGE語句

這并不是一個過失,但是可能是缺少知識或者對于強悍的MERGE語句信心不足。一些數據庫理解其它形式的更新插入(UPSERT)語句, 如 MYSQL的重復主鍵更新語句,但是MERGE在數據庫中確是很強大,很重要,以至于大肆擴展SQL標準,例如SQL SERVER。

解決之道:

如果你使用像聯(lián)合INSERT和UPDATE或者聯(lián)合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入時,請三思。你完全可以使用一個更簡單的MERGE語句來遠離冒險競爭條件。

8. 使用聚合函數代替窗口函數(window functions)

在介紹窗口函數之前,在SQL中聚合數據意味著使用GROUP BY語句與聚合函數相映射。在很多情形下都工作得很好,如聚合數據需要濃縮常規(guī)數據,那么就在join子查詢中使用group查詢。

但是在SQL:2003中定義了窗口函數,這個在很多主流數據庫都實現了它。窗口函數能夠在結果集上聚合數據,但是卻沒有分組。事實上,每個窗口函數都有自己的、獨立的PARTITION BY語句,這個工具對于顯示報告太TM好了。

使用窗口函數:

使SQL更易讀(但在子查詢中沒有GROUP BY語句專業(yè))

提升性能,像關系數據庫管理系統(tǒng)能夠更容易優(yōu)化窗口函數

解決方法:

當你在子查詢中使用GROUP BY語句時,請再三考慮是否可以使用窗口函數完成。

9. 使用內存間接排序

SQL的ORDER BY語句支持很多類型的表達式,包括CASE語句,對于間接排序十分有用。你可能重來不會在Java內存中排序數據,因為你會想:

SQL排序很慢

SQL排序辦不到

處理方法:

如果你在內存中排序任何SQL數據,請再三考慮,是否不能在數據庫中排序。這對于數據庫分頁數據十分有用。

10. 一條一條的插入大量紀錄

JDBC ”懂“批處理(batch),你應該不會忘了它。不要使用INSERT語句來一條一條的出入成千上萬的記錄,(因為)每次都會創(chuàng)建一個新的PreparedStatement對象。如果你的所有記錄都插入到同一個表時,那么就創(chuàng)建一個帶有一條SQL語句以及附帶很多值集合的插入批處理語句。你可能需要在達到一定量的插入記錄后才提交來保證UNDO日志瘦小,這依賴于你的數據庫和數據庫設置。

處理方法:

總是使用批處理插入大量數據。

更多信息請查看IT技術專欄

更多信息請查看網絡編程

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美日韩一区在线观看视频| 欧美乱在线观看| 蜜桃久久av| 精品不卡一区| 欧美日韩一区在线视频| 亚洲剧情一区二区| 国产精品国产三级国产| 亚洲欧美综合精品久久成人| 欧美激情综合| 欧美尤物巨大精品爽| 国产精品女人毛片| 久久久免费精品| 在线欧美影院| 国产精品久久久久毛片软件| 久久激情久久| 欧美一区二区视频在线观看2020| 国产精品二区在线观看| 欧美一级视频一区二区| 最近看过的日韩成人| 国产亚洲一区二区三区| 欧美日韩中文字幕在线| 欧美成人黄色小视频| 亚洲视频一起| 亚洲人妖在线| 日韩视频第一页| 亚洲精品欧美激情| 经典三级久久| 亚洲第一在线视频| 国产精品一区二区在线观看网站| 久久精品成人| 欧美与黑人午夜性猛交久久久| 国产精品99久久久久久www| 亚洲免费成人av| 黄网站免费久久| 国产精品毛片| 欧美午夜精品久久久久久孕妇| 欧美日韩综合| 欧美成人在线免费观看| 欧美一区在线视频| 久久国产日韩| 久久精品免费电影| 久久久久久久999精品视频| 久久精品女人天堂| 久久久青草婷婷精品综合日韩| 久久蜜桃av一区精品变态类天堂| 久久xxxx精品视频| 美女日韩欧美| 欧美人在线视频| 国产欧美日韩精品一区 | 国产精品一二一区| 久久九九热免费视频| 久久久久久**毛片大全| 欧美精品激情blacked18| 欧美日韩一区二区三| 国产真实久久| 亚洲影院免费| 久久久久成人精品免费播放动漫| 欧美成人tv| 国产精品稀缺呦系列在线| 有码中文亚洲精品| 午夜精品一区二区三区在线播放| 欧美亚洲自偷自偷| 蜜桃av久久久亚洲精品| 欧美私人网站| 亚洲视频在线观看网站| 亚洲精品一区二区三区蜜桃久| 在线精品亚洲| 亚洲欧美日韩国产成人精品影院| 午夜精品电影| 蜜臀久久99精品久久久久久9 | 久久阴道视频| 欧美一区在线视频| 免费亚洲视频| 国产有码在线一区二区视频| 精品成人在线观看| 亚洲午夜精品久久久久久浪潮| 亚洲欧美变态国产另类| 久久精品99国产精品日本| 欧美日韩另类丝袜其他| 一区精品在线| 亚洲一区二区三区激情| 久热这里只精品99re8久| 国产精品久久久久久久久搜平片| 永久久久久久| 亚洲综合国产| 欧美精品 日韩| 亚洲国产精品一区在线观看不卡| 亚洲视频在线观看免费| 久久夜色精品国产欧美乱| 欧美激情成人在线| 在线日韩日本国产亚洲| 午夜影院日韩| 国产欧美日韩一区二区三区在线| 亚洲一区二区不卡免费| 欧美激情第10页| 亚洲精品一区中文| 另类尿喷潮videofree| 国产精品日韩高清| 亚洲性线免费观看视频成熟| 欧美激情在线观看| 一级成人国产| 欧美视频你懂的| 亚洲丝袜av一区| 欧美日韩国产专区| 中文一区字幕| 国产伦精品一区二区三区高清版| 亚洲你懂的在线视频| 国产精品五月天| 亚洲一区二区三区免费观看| 国产精品日韩在线播放| 久久精品1区| 亚洲日本欧美| 国产精品va| 久久久www成人免费毛片麻豆| 好吊色欧美一区二区三区四区| 亚洲欧美精品一区| 国产在线精品成人一区二区三区| 久久人人97超碰精品888| 亚洲精品免费网站| 娇妻被交换粗又大又硬视频欧美| 欧美中文字幕在线| 亚洲电影免费在线观看| 欧美精品一区二区三区在线看午夜 | 激情欧美一区二区三区| 欧美国产另类| 欧美在线国产精品| 国产一区二区中文| 久久精品99国产精品酒店日本| 国产精品资源在线观看| 久久久亚洲一区| 亚洲一二三区在线观看| 国产人成精品一区二区三| 欧美日韩极品在线观看一区| 久久久久久久久岛国免费| 精品动漫av| 国产亚洲一区二区三区| 欧美视频福利| 久久国产精品一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 国产精品色午夜在线观看| 最新成人av网站| 午夜欧美精品久久久久久久| 欧美成人综合一区| 国产精品乱码一区二三区小蝌蚪| 亚洲国产精品女人久久久| 欧美在线看片| 欧美三级日韩三级国产三级| 国产日韩欧美综合精品| 99re国产精品| 亚洲五月六月| 在线亚洲美日韩| 久久精品国产99| 欧美看片网站| 黄色一区二区三区| 国产一区导航| 欧美日本乱大交xxxxx| 欧美日韩一区二区三| 99日韩精品| 国产亚洲欧美一区二区| 久久婷婷色综合| 亚洲天天影视| 国产精品日日做人人爱| 欧美一区深夜视频| av成人黄色| 亚洲肉体裸体xxxx137| 欧美在线首页| 蜜桃精品久久久久久久免费影院| 欧美成人一品| 久久精品视频在线免费观看| 一本一本久久| 亚洲黄色毛片| 亚洲精品视频在线观看网站| 欧美午夜精品伦理| 国产精品一区免费视频| 中文精品一区二区三区| 久久久久久亚洲综合影院红桃| 国产精品国产三级国产专播精品人| 亚洲一区在线直播| 欧美精品v日韩精品v韩国精品v| 国产欧美日韩综合精品二区| 亚洲欧美日本视频在线观看| 国产欧美日韩一区二区三区| 亚洲欧美精品| 国产日韩欧美一区二区三区在线观看 | 亚洲高清网站| 免费永久网站黄欧美| 91久久精品www人人做人人爽| 国产精品一卡二| 午夜精品一区二区三区在线| 国产精品狼人久久影院观看方式| 国产亚洲观看| 在线综合欧美| 亚洲伊人一本大道中文字幕| 亚洲香蕉在线观看| 久久精品在线观看| 欧美日韩综合| 欧美日韩一区不卡| 国产日韩成人精品| 亚洲成人资源| 久久久水蜜桃av免费网站|