日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Statement与PreparedStatement的区别

發(fā)布時(shí)間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Statement与PreparedStatement的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Statement與PreparedStatement的區(qū)別

PreparedStatement預(yù)編譯SQL語(yǔ)句,性能好。

PreparedStatement無(wú)序拼接SQL語(yǔ)句,編程更簡(jiǎn)單.

PreparedStatement可以防止SQL注入,安全性好。

?

?

Statement由方法createStatement()創(chuàng)建,該對(duì)象用于發(fā)送簡(jiǎn)單的靜態(tài)的SQL語(yǔ)句。

PreparedStatement由方法preparedStatement()創(chuàng)建,該對(duì)象用于發(fā)送帶有一個(gè)
或多個(gè)輸入?yún)?shù)的SQL語(yǔ)句。該方法繼承了Statement的所有方法。并進(jìn)行了擴(kuò)展。
SQL語(yǔ)句使用“?”作為數(shù)據(jù)占位符,使用setXxx()方法設(shè)置數(shù)據(jù)。

?setXxx()方法的第一個(gè)參數(shù)誰(shuí)要設(shè)置參數(shù)的序數(shù)位置,第二個(gè)參數(shù)時(shí)設(shè)置給該參數(shù)的值。

?

?

//Statement的用法
int id=111;
String sql="selsect * from user where id="+id;
Statement st=connection.CreateStatement();
ResultSet rs=st.executeQuery(sql);


//PreparedStatement的用法
//PreparedStatement可替換變量(在SQL語(yǔ)句中可以包含?)
String sql="select * from user where id=?";
PreparedStatement ps=connection.preparedStatement(sql);//sql在這里進(jìn)行預(yù)編譯
int id =111;
ps.setInt(1,id);//為sql傳入?yún)?shù)
ResultSet rs=ps.executeQuery();//這里不需要sql,因?yàn)樯厦骖A(yù)編譯過(guò)

?

1.PreparedStatement是預(yù)編譯的,對(duì)于批量處理可以大大提高效率. 也叫JDBC存儲(chǔ)過(guò)程 2.使用 Statement 對(duì)象。在對(duì)數(shù)據(jù)庫(kù)只執(zhí)行一次性存取的時(shí)侯,用 Statement 對(duì)象進(jìn)行處理。PreparedStatement 對(duì)象的開(kāi)銷(xiāo)比Statement大,對(duì)于一次性操作并不會(huì)帶來(lái)額外的好處。 3.statement每次執(zhí)行sql語(yǔ)句,相關(guān)數(shù)據(jù)庫(kù)都要執(zhí)行sql語(yǔ)句的編譯,preparedstatement是預(yù)編譯得,?? preparedstatement支持批處理 4. Code Fragment 1:
String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";
stmt.executeUpdate(updateString);

Code Fragment 2:

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();

片斷2和片斷1的區(qū)別在于,后者使用了PreparedStatement對(duì)象,而前者是普通的Statement對(duì)象。PreparedStatement對(duì)象不僅包含了SQL語(yǔ)句,而且大多數(shù)情況下這個(gè)語(yǔ)句已經(jīng)被預(yù)編譯過(guò),因而當(dāng)其執(zhí)行時(shí),只需DBMS運(yùn)行SQL語(yǔ)句,而不必先編譯。當(dāng)你需要執(zhí)行Statement對(duì)象多次的時(shí)候,PreparedStatement對(duì)象將會(huì)大大降低運(yùn)行時(shí)間,當(dāng)然也加快了訪問(wèn)數(shù)據(jù)庫(kù)的速度。
這種轉(zhuǎn)換也給你帶來(lái)很大的便利,不必重復(fù)SQL語(yǔ)句的句法,而只需更改其中變量的值,便可重新執(zhí)行SQL語(yǔ)句。選擇PreparedStatement對(duì)象與否,在于相同句法的SQL語(yǔ)句是否執(zhí)行了多次,而且兩次之間的差別僅僅是變量的不同。如果僅僅執(zhí)行了一次的話,它應(yīng)該和普通的對(duì)象毫無(wú)差異,體現(xiàn)不出它預(yù)編譯的優(yōu)越性。 5.執(zhí)行許多SQL語(yǔ)句的JDBC程序產(chǎn)生大量的Statement和PreparedStatement對(duì)象。通常認(rèn)為PreparedStatement對(duì)象比Statement對(duì)象更有效,特別是如果帶有不同參數(shù)的同一SQL語(yǔ)句被多次執(zhí)行的時(shí)候。PreparedStatement對(duì)象允許數(shù)據(jù)庫(kù)預(yù)編譯SQL語(yǔ)句,這樣在隨后的運(yùn)行中可以節(jié)省時(shí)間并增加代碼的可讀性。

轉(zhuǎn)載于:https://www.cnblogs.com/liubin1988/p/8999159.html

總結(jié)

以上是生活随笔為你收集整理的Statement与PreparedStatement的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。