国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

JDBCTM 指南:入門7-CallableStatement

2020-06-01 23:27:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
7 - CallableStatement
本概述是從《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》這本書中摘引來(lái)的。JavaSoft 目前正在準(zhǔn)備這本書。這本書是一本教程,同時(shí)也是 JDBC 的重要參考手冊(cè),它將作為 Java 系列的組成部份在 1997 年春季由 Addison-Wesley 出版公司出版。


7.1 概述
CallableStatement 對(duì)象為所有的 DBMS 提供了一種以標(biāo)準(zhǔn)形式調(diào)用已儲(chǔ)存過(guò)程的方法。已儲(chǔ)存過(guò)程儲(chǔ)存在數(shù)據(jù)庫(kù)中。對(duì)已儲(chǔ)存過(guò)程的調(diào)用是 CallableStatement 對(duì)象所含的內(nèi)容。這種調(diào)用是用一種換碼語(yǔ)法來(lái)寫的,有兩種形式:一種形式帶結(jié)果參數(shù),另一種形式不帶結(jié)果參數(shù)(有關(guān)換碼語(yǔ)法的信息,參見(jiàn)第 4 節(jié)“語(yǔ)句”)。結(jié)果參數(shù)是一種輸出 (OUT) 參數(shù),是已儲(chǔ)存過(guò)程的返回值。兩種形式都可帶有數(shù)量可變的輸入(IN 參數(shù))、輸出(OUT 參數(shù))或輸入和輸出(INOUT 參數(shù))的參數(shù)。問(wèn)號(hào)將用作參數(shù)的占位符。

在 JDBC 中調(diào)用已儲(chǔ)存過(guò)程的語(yǔ)法如下所示。注意,方括號(hào)表示其間的內(nèi)容是可選項(xiàng);方括號(hào)本身并不是語(yǔ)法的組成部份。

{call 過(guò)程名[(?, ?, ...)]}

返回結(jié)果參數(shù)的過(guò)程的語(yǔ)法為:

{? = call 過(guò)程名[(?, ?, ...)]}

不帶參數(shù)的已儲(chǔ)存過(guò)程的語(yǔ)法類似:

{call 過(guò)程名}

通常,創(chuàng)建 CallableStatement 對(duì)象的人應(yīng)當(dāng)知道所用的 DBMS 是支持已儲(chǔ)存過(guò)程的,并且知道這些過(guò)程都是些什么。然而,如果需要檢查,多種 DatabaseMetaData 方法都可以提供這樣的信息。例如,如果 DBMS 支持已儲(chǔ)存過(guò)程的調(diào)用,則 supportsStoredProcedures 方法將返回 true,而 getProcedures 方法將返回對(duì)已儲(chǔ)存過(guò)程的描述。

CallableStatement 繼承 Statement 的方法(它們用于處理一般的 SQL 語(yǔ)句),還繼承了 PreparedStatement 的方法(它們用于處理 IN 參數(shù))。CallableStatement 中定義的所有方法都用于處理 OUT 參數(shù)或 INOUT 參數(shù)的輸出部分:注冊(cè) OUT 參數(shù)的 JDBC 類型(一般 SQL 類型)、從這些參數(shù)中檢索結(jié)果,或者檢查所返回的值是否為 JDBC NULL。


7.1.1 創(chuàng)建 CallableStatement 對(duì)象
CallableStatement 對(duì)象是用 Connection 方法 prepareCall 創(chuàng)建的。下例創(chuàng)建 CallableStatement 的實(shí)例,其中含有對(duì)已儲(chǔ)存過(guò)程 getTestData 調(diào)用。該過(guò)程有兩個(gè)變量,但不含結(jié)果參數(shù):

CallableStatement cstmt = con.prepareCall(
"{call getTestData(?, ?)}");

其中 ? 占位符為 IN、 OUT 還是 INOUT 參數(shù),取決于已儲(chǔ)存過(guò)程 getTestData。


7.1.2 IN 和 OUT 參數(shù)
將 IN 參數(shù)傳給 CallableStatement 對(duì)象是通過(guò) setXXX 方法完成的。該方法繼承自 PreparedStatement。所傳入?yún)?shù)的類型決定了所用的 setXXX 方法(例如,用 setFloat 來(lái)傳入 float 值等)。

如果已儲(chǔ)存過(guò)程返回 OUT 參數(shù),則在執(zhí)行 CallableStatement 對(duì)象以前必須先注冊(cè)每個(gè) OUT 參數(shù)的 JDBC 類型(這是必需的,因?yàn)槟承?DBMS 要求 JDBC 類型)。注冊(cè) JDBC 類型是用 registerOutParameter 方法來(lái)完成的。語(yǔ)句執(zhí)行完后,CallableStatement 的 getXXX 方法將取回參數(shù)值。正確的 getXXX 方法是為各參數(shù)所注冊(cè)的 JDBC 類型所對(duì)應(yīng)的 Java 類型(從 JDBC 類型到 Java 類型的標(biāo)準(zhǔn)映射見(jiàn) 8.6.1 節(jié)中的表)。換言之, registerOutParameter 使用的是 JDBC 類型(因此它與數(shù)據(jù)庫(kù)返回的 JDBC 類型匹配),而 getXXX 將之轉(zhuǎn)換為 Java 類型。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广丰县| 会理县| 西畴县| 绥宁县| 德钦县| 津南区| 响水县| 曲周县| 吉安县| 漯河市| 绥棱县| 多伦县| 金寨县| 岳普湖县| 江华| 江川县| 登封市| 岳普湖县| 怀化市| 栾川县| 永顺县| 施甸县| 禄劝| 平顺县| 平罗县| 巴东县| 南溪县| 武山县| 江都市| 怀柔区| 平南县| 镇江市| 盐山县| 赤水市| 莱西市| 陆良县| 滨海县| 司法| 大宁县| 云安县| 阿拉善盟|