JDBC

1......

Driver接口:數(shù)據(jù)庫驅(qū)動(dòng)程序的接口,所有具體數(shù)據(jù)庫廠商需要的驅(qū)動(dòng)程序需要實(shí)現(xiàn)次接口。

Connection connect(String url,Properties info)用于獲取數(shù)據(jù)庫連接

2.....

|-Connection接口:與具體的數(shù)據(jù)庫的連接對象。

Statement ? ? ? ? createStatement()創(chuàng)建一個(gè)靜態(tài)sql語句對象

PreparedStatement ? ? ? ?prepareStatement(String sql)創(chuàng)建預(yù)編譯的sql語句對象

(存在sql注入漏洞的bug)

3.....

|-Statement接口:用于執(zhí)行靜態(tài)SQL語句

int ? ? ? ?executeUpdate(String sql)執(zhí)行更新操作的sql語句(create/alter/drop/insert/update/delete)

ResultSet ? ? ?executeQuery(String sql)執(zhí)行查詢操作的sql語句

(select)

(可以防止注入漏洞,對sql語句進(jìn)行預(yù)編譯)

|-PreparedStatement接口:用于執(zhí)行預(yù)編譯的SQL語句(是Statement的子接口)

int ? ? ?executeUpdate()執(zhí)行更新操作的sql語句

ResultSet ? ? executeQuery()執(zhí)行查詢操作的sql語句

4......

|-ResultSet接口:結(jié)果集對象。存儲(chǔ)所有數(shù)據(jù)庫查詢的結(jié)果,用該對象進(jìn)行數(shù)據(jù)遍歷。

booleannext():把光標(biāo)移動(dòng)到下一行。如果下一行有數(shù)據(jù),返回true,如果沒有下一行數(shù)據(jù),返回false。

getXXX(列索引|列字段名稱):獲取字段的數(shù)據(jù)

i"=??)


第一種連接操作數(shù)據(jù)庫的方法 ? ? ? 存在sql注入的風(fēng)險(xiǎn)

第一步: 加載驅(qū)動(dòng)

Class.forName("com.mysql.jdbc.Driver");

第二部:創(chuàng)建鏈接數(shù)據(jù)庫

Connection conn=driverManger.getConnection(url,user,password);

第三部:創(chuàng)建Statement對象

Statement statement=conn.createStatement();

第四步:創(chuàng)建Sql語句

String sql="sql語句";

第五步:執(zhí)行sql語句

如果上面的sql語句是DDL. DML語句 ? 就使用如下代碼:

statement.executeUpdate(sql); ? 可以用int類型去接受


如果上面的sql語句是DQL語句,,就是用如下代碼:

statement.executeQuery(sql); ? 可以用int類型區(qū)接受

第六步: ?關(guān)閉 ?

調(diào)用close方法 ? ? ? ?conn ? ? ? ? statement

if(conn!=null){conn.close()} ? ?statement和conn 一樣


第二種方法 ? 是用Statement的子接口 ? PreparedStatement ? 不會(huì)存在sql注入風(fēng)險(xiǎn)

第一步: 加載驅(qū)動(dòng)

Class.forName("com.mysql.jdbc.Driver");

第二步:創(chuàng)建鏈接數(shù)據(jù)庫

Connection conn=driverManger.getConnection(url,user,password);

第三步:創(chuàng)建sql語句

第四步:創(chuàng)建Preparedstatement對象

Preparedstatement pstat=conn.preparedstatement(sql);

執(zhí)行DDL,DML語句代碼如下

ResultSet rs=pstat.executeupdate(); ? ? Result是個(gè)集合 ? ?

執(zhí)行DQL語句代碼如下

ResultSet rs=pstat.executeQuery();

第五步:關(guān)閉

ResultSet也需要關(guān)閉

conn ? ?pstat ? ? ?rs ?三個(gè)都要關(guān)閉

statement 和 Preparedstatement的區(qū)別:

1...語法不同 ??

? statement:執(zhí)行的事靜態(tài)sql語句

Preparedstatement:先執(zhí)行預(yù)編譯SQL語句: 可以用 ? 進(jìn)行參數(shù)占位 ?后面給參數(shù)賦值

? ? 比如1: ? ? ?String sql="select * from user where uid=?;";

? ? ? ? ? ? ? ? ? ? ?pstat.setInt(1,值);

? ? ? ? ? ? ? ? ? ? int是根據(jù)sql語句 列字段(Uid)的類型, ? 1是第幾個(gè)? ? ?值是填?的 ?

? ? 比如2: ? ? ? ? String sql ="INSERT INTO student(NAME,gender)

VALUES(?,?)";//預(yù)編譯sql:使用?號代替參數(shù)值。一個(gè)?號代表一個(gè)參數(shù)值

2...原理不同

statement:不能進(jìn)行緩存

Preparedstatement:可以進(jìn)行緩存,執(zhí)行效率比statement快

3...安全問題

statement:不能防止sql注入

Preparedstatement:可以防止sql注入

JDBC的批處理:

Statement批處理:

? ? ? ? ? ? ? ? ? ? ?void ? ? ?addBatch(String sql)添加sql到緩存區(qū)(暫時(shí)不發(fā)送)

? ? ? ? ? ? ? ? ? ? ?int[] ? ? ?executeBatch()執(zhí)行批處理命令。發(fā)送所有緩存區(qū)的sql

? ? ? ? ? ? ? ? ? ? ? void ? ? ? clearBatch()清空sql緩存區(qū)

PreparedStatement批處理:

? ? ? ? ? ? ? ? ? void ? ? addBatch()添加參數(shù)到緩存區(qū)

? ? ? ? ? ? ? ? ?int[] ? ? ?executeBatch()執(zhí)行批處理命令。發(fā)送所有緩存區(qū)的sql

? ? ? ? ? ? ? ? void ? ? ?clearBatch()清空sql緩存區(qū)

Mysql不支持批處理優(yōu)化,也不支持PreparedStatement對象優(yōu)化

Oracle支持批處理優(yōu)化,支持PreparedStatement對象優(yōu)化。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JDBC簡介 SUN公司為了簡化、統(tǒng)一對數(shù)據(jù)庫的操作,定義了一套Java操作數(shù)據(jù)庫的規(guī)范,稱之為JDBC。JDBC...
    奮斗的老王閱讀 1,635評論 0 51
  • JDBC概述 在Java中,數(shù)據(jù)庫存取技術(shù)可分為如下幾類:JDBC直接訪問數(shù)據(jù)庫、JDO技術(shù)、第三方O/R工具,如...
    usopp閱讀 3,639評論 3 75
  • 本人的環(huán)境為Myeclipse10、MySQL5.7.15 本文包括:簡介JDBC編程步驟打通數(shù)據(jù)庫程序詳解—Dr...
    廖少少閱讀 4,351評論 7 39
  • java類和數(shù)據(jù)庫表的關(guān)系 類對應(yīng)表,字段對應(yīng)屬性,一行數(shù)據(jù)對應(yīng)一個(gè)對象,所以類的屬性名要和表的字段名相同才能進(jìn)行...
    孫浩j閱讀 659評論 0 1
  • 周二大盤在受到元旦假期期間的重多利好消息影響之下,如中國央行公布的一系列數(shù)據(jù)和指標(biāo),均利好于股市、匯市,致使昨天早...
    融河直播閱讀 195評論 0 0

友情鏈接更多精彩內(nèi)容