黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解JDBC中的PreparedStatement

詳解JDBC中的PreparedStatement

更新時(shí)間:2021-02-24 17:42:11 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1334次

PreparedStatement是用來執(zhí)行SQL查詢語句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三種方式來執(zhí)行查詢語句,其中 Statement 用于通用查詢,PreparedStatement 用于執(zhí)行參數(shù)化查詢,而 CallableStatement則是用于存儲(chǔ)過程。同時(shí)PreparedStatement還經(jīng)常會(huì)在Java面試被提及,本文我們就來詳細(xì)聊一聊JDBC中的PreparedStatement

那么PreparedStatement是什么呢?PreparedStatement是java.sql包下面的一個(gè)接口,用來執(zhí)行SQL語句查詢,通過調(diào)用connection.preparedStatement(sql)方法可以獲得PreparedStatment對(duì)象。數(shù)據(jù)庫系統(tǒng)會(huì)對(duì)SQL語句進(jìn)行預(yù)編譯處理(如果JDBC驅(qū)動(dòng)支持的話),預(yù)處理語句將被預(yù)先編譯好,這條預(yù)編譯的sql查詢語句能在將來的查詢中重用,這樣一來,它比Statement對(duì)象生成的查詢速度更快。下面是一個(gè)例子:

public class PreparedStmtExample {

?public static void main(String args[]) throws SQLException

?{

??????Connection conn = DriverManager.getConnection("mysql:\\localhost:1520",

??????"root","root");

??????PreparedStatement preStatement = conn.prepareStatement("select distinct ??????loan_type from loan where bank=?");

??????preStatement.setString(1, "Citibank");

??????ResultSet result = preStatement.executeQuery();

??????while(result.next())

??????{

??????????System.out.println("Loan Type: " + result.getString("loan_type"));

??????} ??????

????}}

Output:

Loan Type: Personal Loan

Loan Type: Auto Loan

Loan Type: Home Loan

Loan Type: Gold Loan

這個(gè)例子中,如果還是用 PreparedStatement 做同樣的查詢,哪怕參數(shù)值不一樣,比如:”Standard Chated” 或者”HSBC”作為參數(shù)值,數(shù)據(jù)庫系統(tǒng)還是會(huì)去調(diào)用之前編譯器編譯好的執(zhí)行語句(系統(tǒng)庫系統(tǒng)初次會(huì)對(duì)查詢語句做最大的性能優(yōu)化)。默認(rèn)會(huì)返回”TYPE_FORWARD_ONLY”類型的結(jié)果集( ResultSet ),當(dāng)然你也可以使用preparedstatment()的重載方法返回不同類型的結(jié)果集。
使用 PreparedStatement 最重要的一點(diǎn)好處是它擁有更佳的性能優(yōu)勢(shì),SQL語句會(huì)預(yù)編譯在數(shù)據(jù)庫系統(tǒng)中。執(zhí)行計(jì)劃同樣會(huì)被緩存起來,它允許數(shù)據(jù)庫做參數(shù)化查詢。使用預(yù)處理語句比普通的查詢更快,因?yàn)樗龅墓ぷ鞲伲〝?shù)據(jù)庫對(duì)SQL語句的分析,編譯,優(yōu)化已經(jīng)在第一次查詢前完成了)。為了減少數(shù)據(jù)庫的負(fù)載,生產(chǎn)環(huán)境中德JDBC代碼你應(yīng)該總是使用PreparedStatement 。值得注意的一點(diǎn)是:為了獲得性能上的優(yōu)勢(shì),應(yīng)該使用參數(shù)化sql查詢而不是字符串追加的方式。

比起凌亂的字符串追加似的查詢,PreparedStatement查詢可讀性更好、更安全。

PreparedStatement的局限性

盡管PreparedStatement非常實(shí)用,但是它仍有一定的限制。了防止SQL注入攻擊,PreparedStatement不允許一個(gè)占位符(?)有多個(gè)值,在執(zhí)行有**IN**子句查詢的時(shí)候這個(gè)問題變得棘手起來。

關(guān)于PreparedStatement接口,需要重點(diǎn)記住的是:

1. PreparedStatement可以寫參數(shù)化查詢,比Statement能獲得更好的性能。

2. 對(duì)于PreparedStatement來說,數(shù)據(jù)庫可以使用已經(jīng)編譯過及定義好的執(zhí)行計(jì)劃,這種預(yù)處理語句查詢比普通的查詢運(yùn)行速度更快。

3. PreparedStatement可以阻止常見的SQL注入式攻擊。

4. PreparedStatement可以寫動(dòng)態(tài)查詢語句

5. PreparedStatement與java.sql.Connection對(duì)象是關(guān)聯(lián)的,一旦你關(guān)閉了connection,PreparedStatement也沒法使用了。

6. “?” 叫做占位符。

7. PreparedStatement查詢默認(rèn)返回FORWARD_ONLY的ResultSet,你只能往一個(gè)方向移動(dòng)結(jié)果集的游標(biāo)。當(dāng)然你還可以設(shè)定為其他類型的值如:”CONCUR_READ_ONLY”。

8. 不支持預(yù)編譯SQL查詢的JDBC驅(qū)動(dòng),在調(diào)用connection.prepareStatement(sql)的時(shí)候,它不會(huì)把SQL查詢語句發(fā)送給數(shù)據(jù)庫做預(yù)處理,而是等到執(zhí)行查詢動(dòng)作的時(shí)候(調(diào)用executeQuery()方法時(shí))才把查詢語句發(fā)送個(gè)數(shù)據(jù)庫,這種情況和使用Statement是一樣的。

9. 占位符的索引位置從1開始而不是0,如果填入0會(huì)導(dǎo)致*java.sql.SQLException invalid column index*異常。所以如果PreparedStatement有兩個(gè)占位符,那么第一個(gè)參數(shù)的索引時(shí)1,第二個(gè)參數(shù)的索引是2.

以上就是關(guān)于JDBC中的PreparedStatement的詳細(xì)介紹,當(dāng)然由于篇幅限制我們沒有給出實(shí)際的代碼示例,在本站的JDBC教程中有很多很好的代碼實(shí)例,想要探究學(xué)習(xí)的小伙伴可以去下載學(xué)習(xí),提高自己對(duì)JDBC的實(shí)際應(yīng)用能力。

 

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美一区二区三区在线观看不卡 | 亚洲美女高清aⅴ视频免费 亚洲美女福利 | 毛片录像 | 国产伦精品一区二区三区免 | 久久免费大片 | 亚洲欧美在线视频免费 | 看免费毛片天天看 | 免费a级毛片在线观看 | 免费99精品国产自在现线观看 | 日韩一区在线播放 | 久久久久久久网 | 大学生美女穿黑色丝袜网站 | 天天干天天射天天 | 黄网站在线观看高清免费 | 国产高清精品自在久久 | 欧美日韩免费在线视频 | 天天操天天操天天干 | 欧美一级特黄aa大片视频 | 国产在线精品观看一区 | 美女黄色好大美女黄色 | 国产天堂网 | 亚洲人成77777在线观看网 | 欧美高清亚洲欧美一区h | 特级黄色毛片视频 | 欧美国产日本 | 男女性潮高片无遮挡禁18 | 制服丝袜在线第一页 | 青春草网站 | 国产精品久久久香蕉 | 性美国xxxxx 性另类交性类交 | 久久精品国产欧美日韩99热 | 插菊花网| 欧美日本二区 | 国产一区二区三区在线视频 | 欧美影院一区二区 | 成人黄色片视频 | 国产精品成人免费视频 | 波多野结衣在线一区 | 国产专区在线播放 | 五月婷婷色 | 久久综合丁香激情久久 |