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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用

發(fā)布時(shí)間:2025/3/20 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1,Statement對(duì)象是Java 執(zhí)行數(shù)據(jù)庫操作的一個(gè)重要方法,用于在已經(jīng)建立數(shù)據(jù)庫連接的基礎(chǔ)上,向數(shù)據(jù)庫發(fā)送要執(zhí)行的SQL語句。Statement對(duì)象,用于執(zhí)行不帶參數(shù)的簡單SQL語句。
Statement 對(duì)象用于將 SQL 語句發(fā)送到數(shù)據(jù)庫中。實(shí)際上有三種 Statement 對(duì)象,它們都作為在給定連接上執(zhí)行SQL語句的包容器: Statement 對(duì)象用于執(zhí)行不帶參數(shù)的簡單SQL語句;
PreparedStatement(它從 Statement 繼承而來)用于執(zhí)行帶或不帶 IN 參數(shù)的預(yù)編譯 SQL 語句;
CallableStatement(它從 PreparedStatement 繼承而來)CallableStatement 對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫已存在的存儲(chǔ)過程的調(diào)用。它們都專用于發(fā)送特定類型的 SQL 語句。
上文中

Statement stmt = con.createStatement();//Statement對(duì)象實(shí)例 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");//執(zhí)行SQL語句,并把結(jié)果集放在ResultSet對(duì)象中 while (rs.next()) { //對(duì)結(jié)果集進(jìn)行遍歷int x = rs.getInt("a"); //獲得字段a的值String s = rs.getString("b");float f = rs.getFloat("c"); }

第一步:創(chuàng)建Statement對(duì)象實(shí)例stmt后,調(diào)用該對(duì)象的executeQuery(sql)方法執(zhí)行參數(shù)sql語句;當(dāng)然,Statement對(duì)象還有很多方法,如executeUpdate(String sql);
第二步:根據(jù)sql語句執(zhí)行查詢語句后,得出的是一個(gè)結(jié)果集或者說還是一張表,放在ResultSet 的對(duì)象rs中
第三步:循環(huán)遍歷結(jié)果集rs,rs.next()方法每次指向結(jié)果集的一項(xiàng)記錄或者說是一欄,循環(huán)體中調(diào)用get方法如rs.getString(“b”);參數(shù)是表的字段名。就可得到該字段中的值

2,該 PreparedStatement接口繼承Statement,并與之在兩方面有所不同:
PreparedStatement 實(shí)例包含已編譯的 SQL 語句。這就是使語句“準(zhǔn)備好”。包含于 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ù)膕etXXX 方法來提供。
由于 PreparedStatement 對(duì)象已預(yù)編譯過,所以其執(zhí)行速度要快于 Statement 對(duì)象。因此,多次執(zhí)行的 SQL 語句經(jīng)常創(chuàng)建為 PreparedStatement 對(duì)象,以提高效率。

通過使用java.sql.preparedstatement,這個(gè)問題可以自動(dòng)解決。一個(gè)preparedstatement是從java.sql.connection對(duì)象和所提供的sql字符串得到的,sql字符串中包含問號(hào)(?),這些問號(hào)標(biāo)明變量的位置,然后提供變量的值,最后執(zhí)行語句,例如:

string sql = "select * from people where id = ? and name = ?";//先定義要執(zhí)行的sql語句 ps.setint(1,id);// 設(shè)置問號(hào)里的變量值 ps.setstring(2,name); PreparedStatement ps = connection.prepareStatement(sql); Resultset rs = ps.executequery(); while(rs.next()){String u=rs.getString("id");String p=rs.getString("name"); }

使用preparedstatement的另一個(gè)優(yōu)點(diǎn)是字符串不是動(dòng)態(tài)創(chuàng)建的.

PreparedStatement對(duì)象較Statement對(duì)象有很好代碼的可讀性和可維護(hù)性:比如

stmt.executeUpdate("insertintotb_name(col1,col2,col2,col4)values('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");  perstmt=con.prepareStatement("insertintotb_name(col1,col2,col2,col4)values(?,?,?,?)");perstmt.setString(1,var1);perstmt.setString(2,var2);perstmt.setString(3,var3);perstmt.setString(4,var4);perstmt.executeUpdate();

不用我多說,對(duì)于第一種方法.別說其他人去讀你的代碼,就是你自己過一段時(shí)間再去讀,都會(huì)覺得傷心.
下面將給出一個(gè)完整的訪問數(shù)據(jù)庫的例子。

總結(jié)

以上是生活随笔為你收集整理的Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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