最開始 我在程序里使用SQL訪問數(shù)據(jù)庫時(shí),都是直接用“+”將字段值嵌到SQL中。?

          String?sql? = ? " select?s.name?from?student?s?where?s.id=' " ? + ?sId? + ? " ' ";


          后來我開始使用PreparedStatement,在SQL里使用“?”標(biāo)記參數(shù),然后用setXXX方法給參數(shù)賦值。當(dāng)時(shí)只知道這樣用是因?yàn)橛?strong>setDate,setTimeStamp這些用“+”連接不能直接嵌入的值。

          感覺PreparedStatement在性能方面應(yīng)該也能快點(diǎn),可能DBMS會(huì)重用,但不明底層原理。

          這次《數(shù)據(jù)庫實(shí)現(xiàn)》課程終于讓我弄懂了:每個(gè)SQL語句都要通過 語法分析 -> 生成邏輯查詢計(jì)劃 -> 邏輯優(yōu)化 -> 物理優(yōu)化 等步驟生成具體的執(zhí)行計(jì)劃,用PreparedStatement就可以生成一個(gè)執(zhí)行計(jì)劃,以后只是參數(shù)改變(相當(dāng)于執(zhí)行計(jì)劃的執(zhí)行環(huán)境改變),前面的四個(gè)步驟也會(huì)省略,從而提高了效率。

          如果一個(gè)SQL語句要被反復(fù)多次執(zhí)行,或多用戶同時(shí)操作,則應(yīng)選用PreparedStatement!



          版權(quán)所有 羅明
          posted on 2006-11-01 20:18 羅明 閱讀(1791) 評(píng)論(19)  編輯  收藏 所屬分類: Java 、ProgramTech 、StudyDatabase
          Comments
           
          主站蜘蛛池模板: 宜丰县| 治多县| 南开区| 邻水| 南丹县| 莱芜市| 辽宁省| 台北市| 大连市| 阿尔山市| 石屏县| 抚顺市| 嘉荫县| 老河口市| 新宁县| 喜德县| 田阳县| 渝中区| 云浮市| 偃师市| 新乡县| 博客| 萨迦县| 墨脱县| 章丘市| 河北省| 天祝| 石首市| 车致| 郧西县| 融水| 淮南市| 惠水县| 德化县| 甘孜| 木里| 阳曲县| 安国市| 右玉县| 锡林郭勒盟| 巴彦淖尔市|