亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDBCTM 指南:入門6 - PreparedStatement

2019-11-18 13:59:46
字體:
供稿:網(wǎng)友

  6 - PReparedStatement
本概述是從《JDBCTM Database access from javaTM: A Tutorial and Annotated Reference 》這本書中摘引來的。JavaSoft 目前正在預(yù)備這本書。這是一本教程,同時(shí)也是 JDBC 的重要參考手冊(cè),它將作為 Java 系列的組成部份在 1997 年春季由 Addison-Wesley 出版公司出版。


6.1 概述
該 PreparedStatement 接口繼續(xù) Statement,并與之在兩方面有所不同:


PreparedStatement 實(shí)例包含已編譯的 SQL 語句。這就是使語句“預(yù)備好”。
包含于 PreparedStatement 對(duì)象中的 SQL 語句可具有一個(gè)或多個(gè) IN 參數(shù)。IN 參數(shù)的值在 SQL 語句創(chuàng)建時(shí)未被指定。相反的,該語句為每個(gè) IN 參數(shù)保留一個(gè)問號(hào)(“?”)作為占位符。每個(gè)問號(hào)的值必須在該語句執(zhí)行之前,通過適當(dāng)?shù)?setXXX 方法來提供。

由于 PreparedStatement 對(duì)象已預(yù)編譯過,所以其執(zhí)行速度要快于 Statement 對(duì)象。因此,多次執(zhí)行的 SQL 語句經(jīng)常創(chuàng)建為 PreparedStatement 對(duì)象,以提高效率。

作為 Statement 的子類,PreparedStatement 繼續(xù)了 Statement 的所有功能。另外它還添加了一整套方法,用于設(shè)置發(fā)送給數(shù)據(jù)庫以取代 IN 參數(shù)占位符的值。同時(shí),三種方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數(shù)。這些方法的 Statement 形式(接受 SQL 語句參數(shù)的形式)不應(yīng)該用于 PreparedStatement 對(duì)象。


6.1.1 創(chuàng)建 PreparedStatement 對(duì)象
以下的代碼段(其中 con 是 Connection 對(duì)象)創(chuàng)建包含帶兩個(gè) IN 參數(shù)占位符的 SQL 語句的 PreparedStatement 對(duì)象:

PreparedStatement pstmt = con.prepareStatement(
"UPDATE table4 SET m = ? WHERE x = ?");

pstmt 對(duì)象包含語句 "UPDATE table4 SET m = ? WHERE x = ?",它已發(fā)送給 DBMS,并為執(zhí)行作好了預(yù)備。


6.1.2 傳遞 IN 參數(shù)
在執(zhí)行 PreparedStatement 對(duì)象之前,必須設(shè)置每個(gè) ? 參數(shù)的值。這可通過調(diào)用 setXXX 方法來完成,其中 XXX 是與該參數(shù)相應(yīng)的類型。例如,假如參數(shù)具有 Java 類型 long,則使用的方法就是 setLong。setXXX 方法的第一個(gè)參數(shù)是要設(shè)置的參數(shù)的序數(shù)位置,第二個(gè)參數(shù)是設(shè)置給該參數(shù)的值。例如,以下代碼將第一個(gè)參數(shù)設(shè)為 123456789,第二個(gè)參數(shù)設(shè)為 100000000:

pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);

一旦設(shè)置了給定語句的參數(shù)值,就可用它多次執(zhí)行該語句,直到調(diào)用 clearParameters 方法清除它為止。

在連接的缺省模式下(啟用自動(dòng)提交),當(dāng)語句完成時(shí)將自動(dòng)提交或還原該語句。

假如基本數(shù)據(jù)庫和驅(qū)動(dòng)程序在語句提交之后仍保持這些語句的打開狀態(tài),則同一個(gè) PreparedStatement 可執(zhí)行多次。假如這一點(diǎn)不成立,那么試圖通過使用 PreparedStatement 對(duì)象代替 Statement 對(duì)象來提高性能是沒有意義的。

利用 pstmt(前面創(chuàng)建的 PreparedStatement 對(duì)象),以下代碼例示了如何設(shè)置兩個(gè)參數(shù)占位符的值并執(zhí)行 pstmt 10 次。如上所述,為做到這一點(diǎn),數(shù)據(jù)庫不能關(guān)閉 pstmt。在該示例中,第一個(gè)參數(shù)被設(shè)置為 "Hi"并保持為常數(shù)。在 for 循環(huán)中,每次都將第二個(gè)參數(shù)設(shè)置為不同的值:從 0 開始,到 9 結(jié)束。

pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}

6.1.3 IN 參數(shù)中數(shù)據(jù)類型的一致性
setXXX 方法中的 XXX 是 Java 類型。它是一種隱含的 JDBC 類型(一般 SQL 類型),因?yàn)轵?qū)動(dòng)程序?qū)?Java 類型映射為相應(yīng)的 JDBC 類型(遵循該 JDBC Guide中§8.6.2 “映射 Java 和 JDBC 類型”表中所指定的映射),并將該 JDBC 類型發(fā)送給數(shù)據(jù)庫。例如,以下代碼段將 PreparedStatement 對(duì)象 pstmt 的第二個(gè)參數(shù)設(shè)置為 44,Java 類型為 short:

pstmt.setShort(2, 44);

驅(qū)動(dòng)程序?qū)?44 作為 JDBC SMALLINT 發(fā)送給數(shù)據(jù)庫,它是 Java short 類型的標(biāo)準(zhǔn)映射。

程序員的責(zé)任是確保將每個(gè) IN 參數(shù)的 Java 類型映射為與數(shù)據(jù)庫所需的 JDBC 數(shù)據(jù)類型兼容的 JDBC 類型。不妨考慮數(shù)據(jù)庫需要 JDBC SMALLINT 的情況。假如使用方法 setByte ,則驅(qū)動(dòng)程序?qū)?JDBC TINYINT 發(fā)送給數(shù)據(jù)庫。這是可行的,因?yàn)樵S多數(shù)據(jù)庫可從一種相關(guān)的類型轉(zhuǎn)換為另一種類型,并且通常 TINYINT 可用于 SMALLINT 適用的任何地方。然而,對(duì)于要適用于盡可能多的數(shù)據(jù)庫的應(yīng)用程序,最好使用與數(shù)據(jù)庫所需的確切的 JDBC 類型相應(yīng)的 Java 類型。假如所需的 JDBC 類型是 SMALLINT,則使用 setShort 代替 setByte 將使應(yīng)用程序的可移植性更好。


6.1.4 使用 setObject
程序員可使用 setObject 方法顯式地將輸入?yún)?shù)轉(zhuǎn)換為特定的 JDBC 類型。該方法可以接受第三個(gè)參數(shù),用來指定目標(biāo) JDBC 類型。將 Java Object 發(fā)送給數(shù)據(jù)庫之前,驅(qū)動(dòng)程序?qū)阉D(zhuǎn)換為指定的 JDBC 類型。

假如沒有指定 JDBC 類型,驅(qū)動(dòng)程序就會(huì)將 Java Object 映射到其缺省的 JDBC 類型(參見第 8.6.4 節(jié)中的表格),然后將它發(fā)送到數(shù)據(jù)庫。這與常規(guī)的 setXXX 方法類似;在這兩種情況下,驅(qū)動(dòng)程序在將值發(fā)送到數(shù)據(jù)庫之前,會(huì)將該值的 Java 類型映射為適當(dāng)?shù)?JDBC 類型。二者的差別在于 setXXX 方法使用從 Java 類型到 JDBC 類型的標(biāo)準(zhǔn)映射(參見第 8.6.2 節(jié)中的表格),而 setObject 方法使用從 Java Object 類型到 JDBC 類型的映射(參見第 8.6.4 節(jié)中的表格)。

方法 setObject 答應(yīng)接受所有 Java 對(duì)象的能力使應(yīng)用程序更為通用,并可在運(yùn)行時(shí)接受參數(shù)的輸入。這種情況下,應(yīng)用程序在編譯時(shí)并不清楚輸入類型。通過使用 setObject,應(yīng)用程序可接受所有 Java 對(duì)象類型作為輸入,并將其轉(zhuǎn)換為數(shù)據(jù)庫所需的 JDBC 類型。第 8.6.5 節(jié)中的表格顯示了 setObject 可執(zhí)行的所有可能轉(zhuǎn)換。


6.1.5 將 JDBC NULL 作為 IN 參數(shù)發(fā)送
setNull 方法答應(yīng)程序員將 JDBC NULL 值作為 IN 參數(shù)發(fā)送給數(shù)據(jù)庫。但要注重,仍然必須指定參數(shù)的 JDBC 類型。

當(dāng)把 Java null 值傳遞給 setXXX 方法時(shí)(假如它接受 Java 對(duì)象作為參數(shù)),也將同樣把 JDBC NULL 發(fā)送到數(shù)據(jù)庫。但僅當(dāng)指定 JDBC 類型時(shí),方法 setObject 才能接受 null 值。


6.1.6 發(fā)送大的 IN 參數(shù)
setBytes 和 setString 方法能夠發(fā)送無限量的數(shù)據(jù)。但是,有時(shí)程序員更喜歡用較小的塊傳遞大型的數(shù)據(jù)。這可通過將 IN 參數(shù)設(shè)置為 Java 輸入流來完成。當(dāng)語句執(zhí)行時(shí),JDBC 驅(qū)動(dòng)程序?qū)⒅貜?fù)調(diào)用該輸入流,讀取其內(nèi)容并將它們當(dāng)作實(shí)際參數(shù)數(shù)據(jù)傳輸。

JDBC 提供了三種將 IN 參數(shù)設(shè)置為輸入流的方法:setBinaryStream 用于含有未說明字節(jié)的流, setAsciiStream 用于含有 ASCII 字符的流,而 setUnicodeStream 用于含有 Unicode 字符的流。因?yàn)楸仨氈付鞯目傞L度,所以這些方法所采用的參數(shù)比其它的 setXXX 方法要多一個(gè)。這很有必要,因?yàn)橐恍?shù)據(jù)庫在發(fā)送數(shù)據(jù)之前需要知道其總的傳送大小。

以下代碼例示了使用流作為 IN 參數(shù)來發(fā)送文件內(nèi)容:

java.io.File file = new java.io.File("/tmp/data");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"UPDATE Table5 SET stuff = ? WHERE index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

當(dāng)語句執(zhí)行時(shí),將反復(fù)調(diào)用輸入流 fin 以傳遞其數(shù)據(jù)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
天天干天天爽天天操| 香蕉视频一区二区三区| 欧美少妇激情| 国产精品入口麻豆九色| 精品在线观看免费| 国产精成人品免费观看| 日本精品一区二区在线观看| 青青草成人网| 日本精品不卡| www.亚洲成人网| 九九热在线视频免费观看| 超碰免费公开在线| 久久人人爽人人爽人人片av高清| 午夜伦理在线| 国语一区二区三区| 在线观看91精品国产入口| 国产精品扒开腿爽爽爽视频| 国产精品福利无圣光在线一区| 日本三级一区| 女人黄色免费在线观看| 国产精品久久久亚洲一区| 国内精品福利视频| 小泽玛利亚视频在线观看| 国产精品久久久久久福利一牛影视| 国产精品红桃| 91视频免费网址| 久久精品一区二区三区不卡免费视频| 你懂的网址一区二区三区| 成人午夜黄色影院| 伊人再见免费在线观看高清版| 中国美女乱淫免费看视频| 亚洲精品日产精品乱码不卡| 性欧美18+| 视频一区日韩精品| 精品三级在线| 懂色av蜜臀av粉嫩av永久| 日韩一区二区三区精品视频第3页| 亚洲人av在线| 国产一区二区三区在线看麻豆| 96sao精品免费视频观看| 欧美性suv| 国产精品久久久久久久久免费樱桃| 国产青草视频在线观看| 亚洲欧美小说国产图片| 97色在线视频观看| 久久国内精品| 成人午夜淫片100集| 精品88久久久久88久久久| 在线成人福利| 制服.丝袜.亚洲.中文.综合懂| 777永久免费网站国产| 人妻丰满熟妇av无码区app| 开心激情五月婷婷| 久久久久97国产| 日韩精品在线免费观看视频| 1769国产精品视频| 日韩精品久久久久久福利| 国产男女免费视频| 久久久久久不卡| 视频一区国产视频| 久久亚洲精品欧美| 欧美日本高清视频| 日本视频网站在线观看| www成人免费视频| 国产精品乱看| 中文字幕视频免费在线观看| 亚洲欧洲av色图| 欧美丰满老妇熟乱xxxxyyy| 亚洲色成人www永久网站| 老司机午夜免费精品视频| 四虎成人免费在线| 青青草原国产在线| 日韩成人高清| 国产露脸91国语对白| 一区二区国产在线| 偷拍一区二区| 国产亚洲欧美日韩在线观看一区二区| 中文字幕在线观看播放| 久久久亚洲午夜电影| 一区二区三区动漫| 人猿泰山h版在线观看| 免费在线观看一区二区三区| 91社区在线高清| 中文字幕久热精品视频在线| 欧美日韩国产综合视频在线观看| 日韩激情在线| 美女mm1313爽爽久久久蜜臀| 亚洲天堂自拍偷拍| 品天堂xxxx高清| 99re亚洲国产精品| 欧美激情第一页在线观看| 极品色影院av| 国产福利视频一区二区三区| 免费av播放| 黄色在线播放网站| 欧美大成色www永久网站婷| 日本高清xxxx| 国产精品va视频| 欧美一区深夜视频| 国产精品无码久久av| 久久久精品在线观看| 免费看的黄色欧美网站| 亚洲国产精品成人综合久久久| 亚洲精品美女久久| 久久国产免费看| 日韩久久午夜影院| 成人在线免费在线观看| 国产wwwwwww| 神马久久午夜| 亚洲第一搞黄网站| 亚洲成人福利| 亚洲午夜18毛片在线看| 亚洲欧美精品一区二区| 免费黄色日本网站| 亚州精品国产精品乱码不99按摩| 91精品欧美一区二区三区综合在| 欧美日韩一区不卡| 日韩美女在线看免费观看| 中文字幕色婷婷在线视频| 亚洲三级在线免费| 国产成人精品日本亚洲专区61| 精品美女在线观看视频在线观看| 91欧美一区二区三区| 亚洲一区二区动漫| 欧美在线视频一区| japanese国产| 精品不卡视频| 8x拔播拔播x8国产精品| 色婷婷av金发美女在线播放| 精品无码一区二区三区爱欲| 国产又粗又黄视频| 欧美超级乱淫片喷水| 日韩精品一区二区三区在线视频| 成人午夜免费在线视频| 黑人巨大精品欧美一区二区小视频| 日韩成人精品视频| 国产5g成人5g天天爽| 天天色综合久久| 黑人巨大40cm重口| 久久精品亚洲一区二区| 欧美美女一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 激情亚洲另类图片区小说区| 亚洲高清视频在线播放| 亚洲国产精选| www.天天操.com| 性欧美高清强烈性视频| 禁网站在线观看免费视频| 欧美一区二区三区四区五区| 91精品国产乱码久久久久久久| 精品国产成人av| 精品一区二区三区无码视频| 美女久久网站| 精品欧美一区二区三区在线观看| 亚洲国产999| 中文在线资源观看视频网站免费不卡| 毛片网站在线| 日本精品国语自产拍在线观看| 天堂8在线视频| 91在线在线观看| 久久99国产精品久久99大师| 国产一级久久久久毛片精品| 亚洲aaaaaaa| 欧美 日韩 国产 成人 在线| 久久久中精品2020中文| 亚洲欧美日韩久久久久久| 在线视频亚洲自拍| 久久精品无码一区二区日韩av| 在线视频专区| 91传媒视频在线播放| 国模大尺度私拍在线视频| 久热中文字幕在线精品首页| 欧美成年人视频网站| 岛国av中文字幕| 精品国产18久久久久久| 成人午夜在线影视| sm在线播放| 五月婷婷之婷婷| 国产性生交xxxxx免费| 在线免费观看色| 992tv免费直播在线观看| 日韩精品高清在线| 亚洲欧美在线精品| 中文在线最新版天堂8| h免费在线观看| 国产精品国产一区二区| 国产天堂在线播放| 嫩草影院入口一二三| 亚洲第一在线综合网站| 精品国产精品自拍| 可以免费看黄色的网站| 国产福利微拍精品一区二区| 精品无码国模私拍视频| 韩国v欧美v日本v亚洲v| 欧美日韩一区二区三区在线免费观看| 91浏览器在线观看| 国产精品入口夜色视频大尺度| 日本一区二区三区久久| 国产乱人乱偷精品视频a人人澡| 国产日本在线视频| 日韩在线 中文字幕| 日韩欧美在线视频日韩欧美在线视频| 国产无遮挡又黄又爽免费软件| 日日摸夜夜添夜夜添国产精品| 亚洲免费一级片| 日韩av系列| 99免在线观看免费视频高清| 免费黄色网址在线观看| 亚洲精品中文字幕| 久久久久久亚洲精品中文字幕| 福利在线视频网站| h在线观看视频| 91精品一区二区三区久久久久久| 亚洲AV无码片久久精品| 538在线观看| 这里只有精品视频在线| 搡的我好爽在线观看免费视频| 成人欧美一区二区三区小说| 国产成人视屏| 99精品视频免费全部在线| 羞羞在线观看视频| 亚洲一区二区三区视频在线播放| 国产综合色产| 精品人妻aV中文字幕乱码色欲| 中文字幕国产亚洲2019| av毛片在线免费| 模特精品在线| xfplay5566色资源网站| 亚洲美女在线视频| 作爱视频免费观看视频在线播放激情网| 欧美乱做爰xxxⅹ久久久| 爱情岛论坛亚洲首页入口章节| 亚洲欧美制服另类日韩| 国产精品第一国产精品| 国产乱子夫妻xx黑人xyx真爽| 成人精品一区二区三区电影黑人| 人妻内射一区二区在线视频| 精品香蕉一区二区三区| 成人精品小蝌蚪| 香蕉视频在线免费| 一区在线观看视频| 国产又粗又硬又长| 日韩国产精品一区| 成年人网站免费观看| 色偷偷偷在线视频播放| 中文字幕在线日亚洲9| 成人欧美一区二区三区1314| 日韩av在线免费观看| 日本成人在线免费观看| 国模无码视频一区二区三区| 欧美大片免费观看网址| 男人的天堂一区| 免费在线你懂的| 国产三级生活片| 午夜av成人| 国产色噜噜噜91在线精品| 国产精品久久久久aaaa九色| 久久99精品国产| 99国产超薄肉色丝袜交足的后果| 九色精品91| 日韩免费久久| 国产精品xxx电影| 伊大人久久香线焦宗合一75大| 国产黄色免费看| www.五月婷婷| 欧美影视一区在线| 波波电影院一区二区三区| 3p乱日视频| 麻豆亚洲av成人无码久久精品| 国产激情视频一区二区三区| 国产精品久久午夜| 一区国产精品视频| 国产偷倩在线播放| 天堂中文在线观看视频| 美日韩精品免费观看视频| 激情五月六月婷婷| 亚洲一区站长工具| 国产精品麻豆欧美日韩ww| 操人在线观看| 亚洲www视频| 欧美自拍偷拍| 黄色手机在线视频| 日本国产亚洲| 一区在线播放| 欧美日韩在线免费观看视频| 香蕉久久久久久av成人| 日韩伦理一区| 日韩欧美中文免费| 99久久99久久精品免费| 色哟哟入口国产精品| 欧美三级蜜桃2在线观看| 欧美美女在线观看| 最近2019好看的中文字幕免费| 在线视频1区| 久久五月精品中文字幕| 美女视频一区| 亚洲天堂免费| 久久精品国产一区二区三区| 尤物视频在线视频| 欧美一级一区| 一级黄色片网址| 欧美福利一区| 久久精品一区二区三区四区五区| 成人精品在线视频| 成人影视亚洲图片在线| 亚洲精品ww久久久久久p站| 精品无人乱码| 久久性天堂网| 五丁香在线视频| 欧美网色网址| 中文字幕久久久av一区| 麻豆国产一区二区三区四区| caoporen国产精品视频| 国产成人在线播放| 午夜视频在线免费看| 最新av在线播放| 国产又粗又硬视频| 动漫av网站免费观看| 日韩精品在线视频免费观看| 亚洲在线免费观看视频| 波多野结衣av一区二区全免费观看| 蜜桃av免费看| 亚洲成a人v欧美综合天堂下载| 国产视频网站一区二区三区| 91视频免费观看网站| 欧美极品少妇全裸体| 国产精品蜜臀| 91嫩草亚洲精品|