下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、將參數(shù)傳遞給 SELECT 語句的IN子句作者:Sanjay Dhamankar , 2005 年 12 月通過使用 Sun Java Studio Creator 2 IDE中的查詢編輯器,您可以輕松地創(chuàng)建大量復(fù)雜的查詢,其中包括那些帶有參數(shù)化IN子句的查詢。在某些情況下,您可能需要執(zhí)行包含IN子句(帶有參數(shù)或參數(shù)列表)的查詢 SQLSELECT 語句。也就是說,您希望查詢能夠接受IN子句可利用的一個(gè)或一組參數(shù)。例如,您可能需要構(gòu)造一個(gè)從表中選取某些列的SQL SELECT 語句,它使用 WHERE 子句將選擇范圍限定在與值列表中的特定列值(作為參數(shù)傳遞給查詢)相匹配的列。如果要為樣例TRA
2、VEL數(shù)據(jù)庫(kù)中的TRIP表構(gòu)造此類查詢,您可以使用以下SELECT語句,返回其標(biāo)識(shí)符與 1、4或5相匹配的個(gè)人的旅行情況:SELECT ALL TRAVEL.TRIP.TRIPID,TRAVEL.TRIP.PERSONID,TRAVEL.TRIP.DEPDATE,TRAVEL.TRIP.DEPCITY,TRAVEL.TRIP.DESTCITY,TRAVEL.TRIP.TRIPTYPEIDFROM TRAVEL.TRIPWHERE TRAVEL.TRIP.PERSONID IN ( 1,4,5 )但是,您需要將這些值(1、4和5)作為參數(shù)進(jìn)行傳遞,而不是對(duì)它們進(jìn)行硬編碼。您可以使用 Java S
3、tudio Creator 2 查詢編輯器來構(gòu)造一些SELECT 語句,它們將參數(shù)作為 IN子句的一部分進(jìn)行處理。本技術(shù)提示說明了如何完成此類操作,您甚至可以事先不了解查詢所需的參數(shù)數(shù)量。我們可以從比較簡(jiǎn)單的示例入手。如果您在設(shè)計(jì)查詢時(shí)已知曉參數(shù)的數(shù)量,則在設(shè)置IN子句時(shí),其參數(shù)數(shù)量應(yīng)當(dāng)是執(zhí)行查詢時(shí)所需的參數(shù)數(shù)量。 SELECT語句中的每個(gè)參數(shù)都使用問號(hào) (?)占位符來表示。例如,可以按以下方式 更改上面的SELECT語句,使之可以接受 IN子句的參數(shù)。SELECT ALL TRAVEL.TRIP.TRIPID,TRAVEL.TRIP.PERSONID,TRAVEL.TRIP.DEPDATE,
4、TRAVEL.TRIP.DEPCITY,TRAVEL.TRIP.DESTCITY,TRAVEL.TRIP.TRIPTYPEIDFROM TRAVEL.TRIPWHERE TRAVEL.TRIP.PERSONID IN ( ?, ?, ?)請(qǐng)注意,IN子句在圓括號(hào)內(nèi)包含了三個(gè)參數(shù)占位符(?),這表示在執(zhí)行時(shí)需要為此特定查詢傳遞三個(gè)參數(shù)。使用Java Studio Creator 2 查詢編輯器,您可以方便地將這些類型的查詢結(jié)合在一起。請(qǐng)右鍵單擊查詢編輯器網(wǎng)格窗格中的列以打開“添加查詢條件”對(duì)話框。將“比較”字段設(shè)置為下拉選項(xiàng)列表中的IN,然后選擇“參數(shù)”單選按鈕,將條件設(shè)置為(?,?,?)。在完
5、成該對(duì)話框后,網(wǎng)格窗格中的“條件”列將反映您所做的更改 (請(qǐng)參見圖1)圖1:設(shè)置IN子句的參數(shù)您甚至可以通過查詢編輯器測(cè)試此查詢。從圖表窗格或SQL窗格彈岀式菜單中選擇“運(yùn)行查詢”。因?yàn)椴樵儸F(xiàn)在包含一些參數(shù),所以系統(tǒng)將打開“指定參數(shù)值”對(duì)話框,您可以在其中輸入?yún)?shù)值。在上面的示例中,對(duì)話框會(huì)提 示您輸入三個(gè)值。您可以在查詢編輯器的底部窗格中查看查詢結(jié)果。圖2顯示了將PERSONID 設(shè)置為1、4和5來運(yùn)行此參數(shù)化 SQL SELECT語句時(shí),查詢編輯器中顯示出的該語句及運(yùn)行結(jié)果。TRIPHeTF|PlD PERSONID 込 DtPDATfc 0 DEPClTY 0 DESTCRY 回 Q T
6、RIPTVPEID7Ml鈔BS樁序呱存條眸TRIPIDTRAVEL TRIP-ia_戶PERSONIDTRAVEL TRIPIN厲彤)DEPDATEj -LT PAVEL TRiPOEPCITYTRAVtLTRIPdebtciiyTRAVEL TRIP剛 PTYPEIDItraveltripSELECT ALL TRAVF L.lllIP.PERS ONIO,travel.trip depdate,RJWEL.TRIP DEPCrrr,TRf.tl.TRIP DESTCIR TRwFL.TRIP TRIPID. TRAvtL.TRIP.TRlPTYPElDFROM fR/ALTRlPWHERE
7、 TRAVE L.7RP. PERSONID IN (?/?.?)XTRIPIDPERSODEPDATEDEPClTrDESTCITYTREPTYPEID12B105OakandNew York199105-9-14San FranciscoNt* York4105-10-22OakFandTorofto4203105-11-23San FranascoTokyo53&71012-12Sari FrnuscoChicago2200405-6-11San FranciscoWashington DC331005-8-3San JoseWashington DC3333406-J-2San Fnr
8、icr$toTokyo5422406+-11Gan Jo&evashmgton DC3JlHC. 41 TiC Rfan 匚 b匚產(chǎn) cOl h L*lh 日NywiQ圖2 :帶有參數(shù)化IN子句的查詢截至目前,您已指定并設(shè)置了查詢?,F(xiàn)在,我們需要在應(yīng)用程序中添加代碼,這樣在調(diào)用查詢時(shí),應(yīng)用程序會(huì)將參數(shù)值傳遞給 SELECT語句。為此,應(yīng)用程序需要在查詢行集上調(diào)用setObject方法。setObject方法將在運(yùn)行時(shí)設(shè)置這些參數(shù)值。請(qǐng)參閱相關(guān)的行集文檔和API。如果在設(shè)計(jì)查詢時(shí)并不知道所需的參數(shù)數(shù)量,則必須在運(yùn)行時(shí)創(chuàng)建包含”?占位符的查詢,這些占位符的數(shù)量取決于所需的參數(shù)數(shù)量。動(dòng)態(tài)創(chuàng)建查詢后,
9、請(qǐng)使用上述setObject方法來動(dòng)態(tài)設(shè)置每個(gè)參數(shù)值。在應(yīng)用程序中實(shí)現(xiàn)此操作時(shí),您會(huì)發(fā)現(xiàn)以下代碼示例非常有用。請(qǐng)記住,您只能將此代碼作為一種指導(dǎo),因?yàn)樗?未經(jīng)過測(cè)試,甚至也未進(jìn)行編譯。代碼示例1StringBuffer criteria = new StringBuffer(); for (int i=0; i numberOfParameters; i+) if (i = 0 ) criteria.append ( WHERE TRAVEL.TRIP.PERSONID IN ( ?,);else if (i = (numberOfParameters-1) criteria.append
10、( ?);elsecriteria.append ( ?,);String designTimeQuery = new String (SELECT ALL TRAVEL.TRIP.TRIPID, +TRAVEL.TRIP.PERSONID, +TRAVEL.TRIP.DEPDATE, +TRAVEL.TRIP.DEPCITY, +TRAVEL.TRIP.DESTCITY, +TRAVEL.TRIP.TRIPTYPEID +FROM TRAVEL.TRIP ); / save this constant valueString runTimeQuery = new String (design
11、TimeQuery + criteria.toString();try getSessionBean1().getMyRowSet().setCommand(runTimeQuery);/ note the index has to start with 1for (int i=1; i= numberOfParameters; i+) getSessionBean1().getMyRowSet().setObject (i, yourParameteri-1);getSessionBean1().getMyRowSet().execute(); catch (Exception e) / Send the error to a Message Component on the web page rendered error(Error while Executing Query with Parameters:+e.getMessage();技術(shù)文章 Sun Java Studio Creator 2查詢編輯器包含了有關(guān)查詢編輯器的詳細(xì)信息。教程執(zhí)行插入、更新和刪除操作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)設(shè)備租賃協(xié)議
- 2024至2030年中國(guó)粉防己數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 玩具交易協(xié)議
- 信托基礎(chǔ)設(shè)施投資合同
- 2024至2030年中國(guó)歐式水龍頭行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)普膠連體墊片行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)復(fù)合對(duì)重塊數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)發(fā)熱電線數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 公司設(shè)備租賃協(xié)議大綱
- 未來能源項(xiàng)目合作協(xié)議
- 藥物臨床試驗(yàn)概述課件(PPT 23頁(yè))
- 萬頭肉牛養(yǎng)殖場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 色彩的基礎(chǔ)知識(shí)課件.PPT
- 《毛筆書法基礎(chǔ)知識(shí)講座——書法常識(shí)》PPT課件
- 橋梁伸縮縫施工及質(zhì)量保證要點(diǎn)
- 留守兒童一生一檔聯(lián)系卡
- 城鎮(zhèn)5000噸日供水工程可行性研究報(bào)告(含圖紙)
- 濕法煉鋅的浸出過程
- 新生兒液體療法PPT課件.ppt
- 個(gè)國(guó)際音標(biāo)對(duì)應(yīng)的字母組合new
- 完整版陸河客家請(qǐng)神書
評(píng)論
0/150
提交評(píng)論