50.Statement和PreparedStatement之間的區(qū)別

一.PreparedStatement是預(yù)編譯的,對于批量處理可以大大提高效率. 也叫JDBC存儲過程

二.使用 Statement 對象。在對數(shù)據(jù)庫只執(zhí)行一次性存取的時侯禽车,用 Statement 對象進(jìn)行處理姑宽。PreparedStatement 對象的開銷比Statement大遣耍,對于一次性操作并不會帶來額外的好處。

三.statement每次執(zhí)行sql語句炮车,相關(guān)數(shù)據(jù)庫都要執(zhí)行sql語句的編譯舵变,preparedstatement是預(yù)編譯得, preparedstatement支持批處理

四.代碼片段1:

String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";

stmt.executeUpdate(updateString);

代碼片段2:

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");

updateSales.setInt(1, 75);

updateSales.setString(2, "Colombian");

updateSales.executeUpdate();

片斷2和片斷1的區(qū)別在于,后者使用了PreparedStatement對象瘦穆,而前者是普通的Statement對象纪隙。PreparedStatement對象不僅包含了SQL語句,而且大多數(shù)情況下這個語句已經(jīng)被預(yù)編譯過扛或,因而當(dāng)其執(zhí)行時绵咱,只需DBMS運行SQL語句,而不必先編譯熙兔。當(dāng)你需要執(zhí)行Statement對象多次的時候悲伶,PreparedStatement對象將會大大降低運行時間艾恼,當(dāng)然也加快了訪問數(shù)據(jù)庫的速度。

這種轉(zhuǎn)換也給你帶來很大的便利麸锉,不必重復(fù)SQL語句的句法钠绍,而只需更改其中變量的值,便可重新執(zhí)行SQL語句花沉。選擇PreparedStatement對象與否柳爽,在于相同句法的SQL語句是否執(zhí)行了多次,而且兩次之間的差別僅僅是變量的不同主穗。如果僅僅執(zhí)行了一次的話泻拦,它應(yīng)該和普通的對象毫無差異,體現(xiàn)不出它預(yù)編譯的優(yōu)越性忽媒。

五.執(zhí)行許多SQL語句的JDBC程序產(chǎn)生大量的Statement和PreparedStatement對象争拐。通常認(rèn)為PreparedStatement對象比Statement對象更有效,特別是如果帶有不同參數(shù)的同一SQL語句被多次執(zhí)行的時候。PreparedStatement對象允許數(shù)據(jù)庫預(yù)編譯SQL語句晦雨,這樣在隨后的運行中可以節(jié)省時間并增加代碼的可讀性架曹。

然而,在Oracle環(huán)境中闹瞧,開發(fā)人員實際上有更大的靈活性绑雄。當(dāng)使用Statement或PreparedStatement對象時,Oracle數(shù)據(jù)庫會緩存SQL語句以便以后使用奥邮。在一些情況下,由于驅(qū)動器自身需要額外的處理和在Java應(yīng)用程序和Oracle服務(wù)器間增加的網(wǎng)絡(luò)活動万牺,執(zhí)行PreparedStatement對象實際上會花更長的時間。

然而洽腺,除了緩沖的問題之外脚粟,至少還有一個更好的原因使我們在企業(yè)應(yīng)用程序中更喜歡使用PreparedStatement對象,那就是安全性。傳遞給PreparedStatement對象的參數(shù)可以被強(qiáng)制進(jìn)行類型轉(zhuǎn)換蘸朋,使開發(fā)人員可以確保在插入或查詢數(shù)據(jù)時與底層的數(shù)據(jù)庫格式匹配核无。

當(dāng)處理公共Web站點上的用戶傳來的數(shù)據(jù)的時候,安全性的問題就變得極為重要藕坯。傳遞給PreparedStatement的字符串參數(shù)會自動被驅(qū)動器忽略团南。最簡單的情況下,這就意味著當(dāng)你的程序試著將字符串“D'Angelo”插入到VARCHAR2中時炼彪,該語句將不會識別第一個“吐根,”,從而導(dǎo)致悲慘的失敗辐马。幾乎很少有必要創(chuàng)建你自己的字符串忽略代碼佑惠。

在Web環(huán)境中,有惡意的用戶會利用那些設(shè)計不完善的、不能正確處理字符串的應(yīng)用程序膜楷。特別是在公共Web站點上,在沒有首先通過PreparedStatement對象處理的情況下旭咽,所有的用戶輸入都不應(yīng)該傳遞給SQL語句。此外赌厅,在用戶有機(jī)會修改SQL語句的地方穷绵,如HTML的隱藏區(qū)域或一個查詢字符串上,SQL語句都不應(yīng)該被顯示出來特愿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仲墨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子揍障,更是在濱河造成了極大的恐慌目养,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毒嫡,死亡現(xiàn)場離奇詭異癌蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兜畸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門努释,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咬摇,你說我怎么就攤上這事伐蒂。” “怎么了肛鹏?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵逸邦,是天一觀的道長。 經(jīng)常有香客問我在扰,道長缕减,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任健田,我火速辦了婚禮,結(jié)果婚禮上佛纫,老公的妹妹穿的比我還像新娘妓局。我一直安慰自己,他們只是感情好呈宇,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布好爬。 她就那樣靜靜地躺著,像睡著了一般甥啄。 火紅的嫁衣襯著肌膚如雪存炮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音穆桂,去河邊找鬼宫盔。 笑死,一個胖子當(dāng)著我的面吹牛享完,可吹牛的內(nèi)容都是我干的灼芭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼般又,長吁一口氣:“原來是場噩夢啊……” “哼彼绷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茴迁,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤寄悯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堕义,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猜旬,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年胳螟,在試婚紗的時候發(fā)現(xiàn)自己被綠了昔馋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡糖耸,死狀恐怖秘遏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉竟,我是刑警寧澤邦危,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站舍扰,受9級特大地震影響倦蚪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜边苹,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一陵且、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧个束,春花似錦慕购、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阱表,卻和暖如春殿如,著一層夾襖步出監(jiān)牢的瞬間贡珊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工涉馁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留门岔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓谨胞,卻偏偏與公主長得像固歪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胯努,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 本節(jié)介紹Statement接口及其子類PreparedStatement和CallableStatement牢裳。 它...
    zlb閱讀 1,143評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法叶沛,內(nèi)部類的語法蒲讯,繼承相關(guān)的語法,異常的語法灰署,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • JDBC簡介 SUN公司為了簡化判帮、統(tǒng)一對數(shù)據(jù)庫的操作,定義了一套Java操作數(shù)據(jù)庫的規(guī)范溉箕,稱之為JDBC晦墙。JDBC...
    奮斗的老王閱讀 1,507評論 0 51
  • 1.PreparedStatement是預(yù)編譯的,對于批量處理可以大大提高效率. 也叫JDBC存儲過程2.使用 S...
    薛云龍閱讀 1,818評論 0 1
  • 隨一場風(fēng) 與夏錯過 淋一場雨 迎來秋天 總是聽別人 說起秋 是相遇的時刻 可能 總是不知不覺 戰(zhàn)戰(zhàn)兢兢的到來 沒有...
    我是張十三閱讀 406評論 0 3