溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

jdbc基本使用詳解

發(fā)布時間:2020-06-07 22:06:28 來源:網(wǎng)絡(luò) 閱讀:645 作者:眼前一黑 欄目:MySQL數(shù)據(jù)庫

JDBC全稱Java DataBase Connectivity / java數(shù)據(jù)庫連接,是使用java連接和操作數(shù)據(jù)庫的最基本驅(qū)動工具。

sun公司的javasoft部門開發(fā)

最早的JDBC 1.0 隨JDK1.1發(fā)布

  • 由一組用Java語言編寫的類和接口組成

  • 用于執(zhí)行SQL語句的Java API

  • 可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問


使用JDBC驅(qū)動的最大的好處就是可以訪問不同的數(shù)據(jù)庫,因為不同數(shù)據(jù)庫本身提供不同的驅(qū)動以迎合JDBC驅(qū)動

流程

  • 導(dǎo)入jar包:驅(qū)動jar包!

  • 加載驅(qū)動類:Class.forname(類名)

  • 給出urlusername、password

  • 使用DriverManager類得到Connection對象

jdbc基本使用詳解

JDBC使用流程

  • 導(dǎo)入jar包:驅(qū)動jar包!

  • 加載驅(qū)動類:Class.forname(類名)

  • 給出url、usernamepassword

  • 使用DriverManager類得到Connection對象

四大參數(shù):

  1. driverClassName--com.mysql.jdbc.DriverMySql數(shù)據(jù)庫)

  2. url--jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱(MySql數(shù)據(jù)庫)

  3. Uesrname

  4. Password


一、加載驅(qū)動類(注冊驅(qū)動)

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

反射機制創(chuàng)建驅(qū)動類對象

forName靜態(tài)方法:返回與給定字符串名稱的類或接口相關(guān)聯(lián)的類對象

com.mysql.jdbc.Driver

所有java.sql.driver的實現(xiàn)類都提供了static代碼塊,代碼塊中代碼把自己注冊到DriverManage

(向 DriverManager 注冊給定驅(qū)動程序: 新加載的驅(qū)動程序類應(yīng)該調(diào)用 registerDriver 方法讓 DriverManager 知道自己)

public class Driver extends NonRegisteringDriver implements java.sql.Driver {

static {

try {

java.sql.DriverManager.registerDriver(new Driver());

} catch (SQLException E) {

throw new RuntimeException("Can't register driver!");

}

}

public Driver() throws SQLException {

// Required for Class.forName().newInstance()

}

}

?

二、獲取連接(通過DBUrl、UserName、PassWord)

Connection conn = DriverManager.getConnection( DB_URL, USER, PASS );

java.sql.DriverManager
用于管理一組 JDBC 驅(qū)動程序的基本服務(wù)

注意: JDBC 2.0 API中新增的DataSource接口提供了另一種連接到數(shù)據(jù)源的方法。 使用DataSource對象是連接到數(shù)據(jù)源的首選方法。

java.sql.Connection

與特定數(shù)據(jù)庫的連接(會話)。在連接上下文中執(zhí)行 SQL 語句并返回結(jié)果。


三、操作數(shù)據(jù)庫(CURD)

?

  1. 獲取Statement

Statement stmt = con.createStatement();

java.sql .Statement

用于執(zhí)行靜態(tài)SQL語句并返回其生成的結(jié)果的對象

在默認(rèn)情況下,同一時間每個 Statement 對象在只能打開一個 ResultSet 對象

?

??????2、執(zhí)行execute方法(executeUpdate、executeQuery)

?????????executeUpdate(String?sql)

??????????執(zhí)行給定SQL 語句,該語句可能為?INSERT、UPDATE?或?DELETE?語句,或者不返回任何內(nèi)容的 SQL 語句(如 ? SQL DDL 語句)

? 方法返回值:

SQL語句執(zhí)行后影響的數(shù)據(jù)行數(shù)

(1) 對于 SQL 數(shù)據(jù)操作語言 (DML) 語句,返回行計數(shù)

(2) 對于什么都不返回的 SQL 語句,返回 0

? ? ? ? executeQuery(String?sql)

? ? ? ? ? 執(zhí)行給定的Query?語句語句,該語句返回單個ResultSet 對象(結(jié)果集)

??ResultSet?
????表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。

????需解析返回的結(jié)果集

?

? ? ? 3、解析ResultSet對象(一般查詢操作才存在)

ResoultSet對象中的數(shù)據(jù)存儲格式:二維表格

遍歷結(jié)果集方法

ResultSet 對象具有指向其當(dāng)前數(shù)據(jù)行的行光標(biāo)

最初,光標(biāo)被置于第一行之前。

next 方法將光標(biāo)移動到下一行;因為該方法在 ResultSet 對象沒有下一行時返回 false,所以可以在 while 循環(huán)中使用它來迭代結(jié)果集

jdbc基本使用詳解

? ? ? ?next()

? ? ? ? ? ? ? 將光標(biāo)從當(dāng)前位置向下移一行。

? ? ? ?兩種獲取列值方法:

????????????????????????1、列編號

????????????????????????? ? ?getInt(int?columnIndex)

????????????????????????2、列名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?getInt(String?columnLabel)



4、關(guān)閉連接(Connection、Statement、ResultSet)?????

  • connection.close();——必須關(guān)閉

  • statement.close();

  • resultset.close();

節(jié)省資源

在不使用數(shù)據(jù)庫連接池情況下,connection.close()關(guān)閉時,statement和resoultset也會隨之自動關(guān)閉

但是如果使用了數(shù)據(jù)庫連接池,connection.close()不會關(guān)閉連接,只會歸還給連接池,statement和resoultset對象就會不斷持有

所以最好將ResultSet、Statement、Connection按順序close



????


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI