真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Statement和Preparement怎么在JDBC中使用

這篇文章給大家介紹Statement和Preparement怎么在JDBC中使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)由有經(jīng)驗(yàn)的網(wǎng)站設(shè)計(jì)師、開發(fā)人員和項(xiàng)目經(jīng)理組成的專業(yè)建站團(tuán)隊(duì),負(fù)責(zé)網(wǎng)站視覺設(shè)計(jì)、用戶體驗(yàn)優(yōu)化、交互設(shè)計(jì)和前端開發(fā)等方面的工作,以確保網(wǎng)站外觀精美、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作易于使用并且具有良好的響應(yīng)性。

Statement對象是用來執(zhí)行SQL語句的

PreparedStatement:預(yù)編譯的Statement對象,是Statement的子接口。

一.性能和代碼編寫的簡潔程度方面

它允許數(shù)據(jù)庫預(yù)編譯SQL語句(這些SQL語句通常有帶有參數(shù)),以后每次只需改變SQL命令的參數(shù),避免數(shù)據(jù)庫每次都需要編譯SQL語句,提高了性能。 e.g. 連接數(shù)據(jù)庫部分

//已定義好driver、url、user、passwd等
//加載驅(qū)動
Class.forName(driver);
//獲得連接
Connection conn = DriverManager.getConnection(url, user, passwd);

Statement:

//用Connection創(chuàng)建一個(gè)Statement
Statement stmt = conn.createStatement() {
  //100條SQL語句來插入100條記錄
  for(int i = 0;i < 100;i++) {
    stmt.executeUpdate("insert into student values(" + "null, 'aaa" + i + "',90)");
  }
}

PreparedStatement:

//用Connection創(chuàng)建一個(gè)PreparedStatement
PreparedStatement pstmt = conn,getPreparedStatement("insert into student_table values(null, ?, 90)") {
  //設(shè)置參數(shù),100次傳入?yún)?shù)而不是100次傳入SQL語句
  for(int i = 0;i < 100;i++) {
    pstmt.setString(1, "姓名" + i);
  //執(zhí)行
  pstmt.executeUpdate();
  }
}

通過運(yùn)行以上的代碼可以發(fā)現(xiàn),PreparedStatement插入100條記錄所用的時(shí)間比Statement插入100條記錄所花費(fèi)時(shí)間少。而且可以在代碼中可以看出,帶有參數(shù)的SQL語句,創(chuàng)建Statement對象需要對參數(shù)進(jìn)行拼接,但是PreparedStatement會簡潔很多。

完整代碼移步GitHub:Statement&PrepareStatement

運(yùn)行結(jié)果:

Statement和Preparement怎么在JDBC中使用

二.安全方面

又因?yàn)镻reparedStatement不需要拼接,還可以防止SQL注入從而提高安全性

注:SQL注入是一種Cracker入侵方式,從SQL語句的漏洞入侵

比如一個(gè)登錄頁面,我們在獲取表單傳來的參數(shù),將其與數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對,比對有該賬號密碼時(shí)則登錄成功:

Statement:

//傳入?yún)?shù)username和passwd是提交的信息
String sql = "select * from users " + "where username = ' " + username + " ' and password= ' " + passwd + " ';
rs = stmt.executeQuery(sql);

如果在username框中輸入了:'or true or',那么,拼接后的SQL語句就變成了:

select * from users where username = ' ' or true or ' ' and desc = ' ';

結(jié)果為true被SQL當(dāng)成直接量那么直接會登錄成功

PreparedStatement:

//傳入?yún)?shù)username和passwd是提交的信息
PreparedStatement pstmt = conn.getPreparedStatement("select * from users where username = ? and password= ?");
pstmt.setString(1, username);
pstmt.setString(2, passwd);

從上述可以看出PreparedStatement相較于Statement有三個(gè)好處:

  • 1. 預(yù)編譯,性能較好

  • 2. 不用拼接,易編寫易讀懂

  • 3. 防止SQL注入,提高安全性

關(guān)于Statement和Preparement怎么在JDBC中使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文名稱:Statement和Preparement怎么在JDBC中使用
文章網(wǎng)址:http://weahome.cn/article/iiejoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部