隨筆-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對象實際上會花更長的時間?!?BR>
          實際上,我的測試結果是:在同一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 我的萬花@ 閱讀(146) 評論(0)  編輯  收藏 所屬分類: 技術文章柜子

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


          網站導航:
           
          主站蜘蛛池模板: 武强县| 依安县| 台东市| 崇州市| 汕尾市| 长乐市| 江华| 太保市| 河曲县| 屏南县| 秭归县| 土默特左旗| 咸宁市| 邳州市| 赤城县| 攀枝花市| 正宁县| 罗定市| 大名县| 山东省| 蓬安县| 井陉县| 洪江市| 资阳市| 仙游县| 隆回县| 泸水县| 宁城县| 武强县| 淮北市| 河池市| 册亨县| 延边| 商南县| 峨眉山市| 德庆县| 张家界市| 丰城市| 泰顺县| 伊吾县| 射洪县|