隨筆-4  評論-0  文章-3  trackbacks-0
          我們開發的是一套大型門戶系統,因為是Internet訪問的,所以,Statement會出現安全問題,這個在

          http://blog.csdn.net/hongbo781202/archive/2005/09/19/485092.aspx里面已經討論過了,然后我抄一段ORACLE電子雜志的話給大家看看:“除了緩沖的問題之外,至少還有一個更好的原因使我們在企業應用程序中更喜歡使用 PreparedStatement對象,那就是安全性。傳遞給PreparedStatement對象的參數可以被強制進行類型轉換,使開發人員可以確保在插入或查詢數據時與底層的數據庫格式匹配。
          當處理公共Web站點上的用戶傳來的數據的時候,安全性的問題就變得極為重要。傳遞給 PreparedStatement的字符串參數會自動被驅動器忽略。最簡單的情況下,這就意味著當你的程序試著將字符串“DAngelo”插入到 VARCHAR2中時,該語句將不會識別第一個“,”,從而導致悲慘的失敗。幾乎很少有必要創建你自己的字符串忽略代碼。
          在Web環境中,有惡意的用戶會利用那些設計不完善的、不能正確處理字符串的應用程序。特別是在公共Web站點上,在沒有首先通過PreparedStatement對象處理的情況下,所有的用戶輸入都不應該傳遞給SQL語句。此外,在用戶有機會修改SQL語句的地方,如HTML的隱藏區域或一個查詢字符串上,SQL語句都不應該被顯示出來。”。這段話和我們群里面的討論一模一樣。

          關于性能問題,再給大家看段話:“通常認為PreparedStatement 對象比Statement對象更有效,特別是如果帶有不同參數的同一SQL語句被多次執行的時候。PreparedStatement對象允許數據庫預編譯SQL語句,這樣在隨后的運行中可以節省時間并增加代碼的可讀性。
          然而,在Oracle環境中,開發人員實際上有更大的靈活性。當使用 Statement或PreparedStatement對象時,Oracle數據庫會緩存SQL語句以便以后使用。在一些情況下,由于驅動器自身需要額外的處理和在Java應用程序和Oracle服務器間增加的網絡活動,執行PreparedStatement對象實際上會花更長的時間。”

          實際上,我的測試結果是:在同一SQL執行5次的情況下,PrepareStatement比Statement要慢3%.

          我們再看看http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html
          里面有詳細的圖表說明為什么Statement比PreparedStatement快。結論是:一個prepared statement要執行65次以上才能趕上一個普通statement的執行效率。

          另外一個問題就是Index的使用,基本的原則就是: 如果是多列Index,一般應該保證這幾個列都在查詢條件中。而且對于單列Index,只有滿足查詢出來的結果命中率在20%以下,使用索引會才會加快速度! 否則可能會越Index越慢哦!

          根據經驗看,上面的結論對Oracle,Sybase,Mysql,Informix都成立,好可怕啊,不知道我前兩年的程序怎么做的,原來我前兩年都是在謊言的邊緣度過!
          posted on 2005-11-09 18:35 我的萬花@ 閱讀(152) 評論(0)  編輯  收藏 所屬分類: 技術文章柜子

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 平谷区| 新巴尔虎右旗| 从化市| 深泽县| 昆明市| 上杭县| 合山市| 正镶白旗| 济宁市| 镇宁| 呼图壁县| 天祝| 栾城县| 凤山市| 泾川县| 马公市| 资源县| 韶关市| 吉水县| 津南区| 龙州县| 肥西县| 宕昌县| 濮阳县| 锡林郭勒盟| 博客| 东山县| 布拖县| 五常市| 高密市| 洛浦县| 浮山县| 五大连池市| 萨嘎县| 乃东县| 织金县| 潢川县| 梅州市| 阿坝县| 镇远县| 遵义市|