您好,登錄后才能下訂單哦!
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(類名)
給出url、username、password
使用DriverManager類得到Connection對象
JDBC使用流程
導(dǎo)入jar包:驅(qū)動jar包!
加載驅(qū)動類:Class.forname(類名)
給出url、username、password
使用DriverManager類得到Connection對象
四大參數(shù):
driverClassName--com.mysql.jdbc.Driver(MySql數(shù)據(jù)庫)
url--jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱(MySql數(shù)據(jù)庫)
Uesrname
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)
?
獲取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é)果集
? ? ? ?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
????
免責(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)容。