JDBC 由 Java 編寫(xiě)的類及接口組成殿雪,同時(shí)提供了用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的 JDBC API冤寿,并支持 SQL 語(yǔ)言。利用 JDBC 可以將 Java 代碼連接到 Oracle、DB2维蒙、SQLServer儿倒、MySQL 等數(shù)據(jù)庫(kù)版保,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)操作的目的。
一夫否、JDBC 簡(jiǎn)介
JDBC(Java DataBase Connectivity彻犁,Java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行 SQL 語(yǔ)句的 Java API,可以為多種關(guān)系型數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn)凰慈,它由一組用 Java 編寫(xiě)的類和接口組成汞幢,具有很好的跨平臺(tái)特性。使用 JDBC 編寫(xiě)的數(shù)據(jù)庫(kù)應(yīng)用程序可以在任何支持 Java 的平臺(tái)上運(yùn)行微谓,而不必在不同的平臺(tái)上編寫(xiě)不同的應(yīng)用程序急鳄。JDBC 提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口堰酿,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序疾宏。同時(shí),JDBC 也是個(gè)商標(biāo)名触创。JDBC 的主要功能如下:
- 建立與數(shù)據(jù)庫(kù)或者其他數(shù)據(jù)源的鏈接坎藐。
- 向數(shù)據(jù)庫(kù)發(fā)送 SQL 命令。
- 處理數(shù)據(jù)庫(kù)的返回結(jié)果哼绑。
二岩馍、JDBC 常用類和接口
連接到數(shù)據(jù)庫(kù)(Connection)、建立操作指令(Statement)抖韩、執(zhí)行查詢指令(executeQuery)蛀恩、獲得查詢結(jié)果(ResultSet)等。
1??驅(qū)動(dòng)程序管理類(DriverManager)
JDBC 的管理類茂浮,作用于用戶和驅(qū)動(dòng)程序之間双谆。它跟蹤在可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接席揽。另外顽馋,DriverManager 類也處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示事務(wù)。對(duì)于簡(jiǎn)單的應(yīng)用程序幌羞,一般程序員需要在此類中直接使用唯一的方法時(shí) DriverManager.getConnection()寸谜。該方法將建立與數(shù)據(jù)庫(kù)的鏈接。JDBC 允許用戶調(diào)用 DriverManager 的方法 getDriver()属桦、getDrivers()和 registerDriver() 及 Driver 的方法 connect()熊痴。
2??聲明類(Statement)
Statement對(duì)象用于將 SQL 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中他爸。實(shí)際上有三種 Statement 對(duì)象,它們都作為在給定鏈接上執(zhí)行 SQL 語(yǔ)句的包容器:Statement果善、PreparedStatement(Statement的子類)和 CallableStatement(PreparedStatement的子類)讲逛。它們都專用于發(fā)送特定類型的 SQL 語(yǔ)句:
- Statement 對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單的 SQL 語(yǔ)句。Statement 接口提供了執(zhí)行語(yǔ)句和獲取結(jié)果的基本方法岭埠。
- PerparedStatement 對(duì)象用于執(zhí)行帶或不帶 IN 參數(shù)的預(yù)編譯 SQL 語(yǔ)句盏混。PeraredStatement 接口添加處理 IN 參數(shù)的方法。
- CallableStatement 對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫(kù)已存儲(chǔ)過(guò)程的調(diào)用惜论。CallableStatement 添加處理 OUT 參數(shù)的方法许赃。
Statement提供了許多方法,最常用的方法如下:
①execute():運(yùn)行語(yǔ)句馆类,返回是否有結(jié)果集混聊。
②executeQuery():運(yùn)行查詢語(yǔ)句,返回 ReaultSet 對(duì)象乾巧。
③executeUpdata():運(yùn)行更新操作句喜,返回更新的行數(shù)。
④addBatch():增加批處理語(yǔ)句沟于。
⑤executeBatch():執(zhí)行批處理語(yǔ)句咳胃。
⑥clearBatch():清除批處理語(yǔ)句。
3??數(shù)據(jù)庫(kù)連接類(Connection)
Connection 對(duì)象代表與數(shù)據(jù)庫(kù)的鏈接旷太。連接過(guò)程包括所執(zhí)行的 SQL 語(yǔ)句和在該連接上所返回的結(jié)果展懈。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)連接,或者可與很多數(shù)據(jù)庫(kù)有連接供璧。打開(kāi)連接與數(shù)據(jù)庫(kù)建立連接的標(biāo)準(zhǔn)方法是調(diào)用 DriverManager.getConnection()存崖。
String url=“jdbc:mysql://127.0.0.1:3306/xxp”;
String user=“root”;
String password=“tiger”;
DriverManager.getConnection(url,user,password);
4??結(jié)果集合類(ResultSet)
ResultSet 包含符合 SQL 語(yǔ)句中條件的所有行記錄,并且它通過(guò)一套 get 方法(這些get方法可以訪問(wèn)當(dāng)前行中的不同列)提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn)睡毒。ResultSet.next() 用于移動(dòng)到 ResultSet 中的下一行来惧,使下一行成為當(dāng)前行。
5??JDBC 編程步驟
加載驅(qū)動(dòng)程序
Class.forName(driverClass);
加載 mysql 驅(qū)動(dòng):Class.forName(“com.mysql.jdbc.Driver”);
加載 oracle 驅(qū)動(dòng):Class.forName(“oracle.jdbc.driver.OracleDriver”);獲得數(shù)據(jù)庫(kù)連接
DriverManager.getConnection(url,user,pwd);
DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,user,pwd);創(chuàng)建 Statement 對(duì)象:
conn.createStatement();
向數(shù)據(jù)庫(kù)發(fā)送 SQL 命令
處理數(shù)據(jù)庫(kù)的返回結(jié)果(ResultSet類)
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "root";
String pwd = "root";
//1.加載驅(qū)動(dòng)程序
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//2.獲得數(shù)據(jù)庫(kù)鏈接
Connection conn = DriverManager.getConnection(url, user, pwd);
//3.通過(guò)數(shù)據(jù)庫(kù)的連接操作數(shù)據(jù)庫(kù)演顾,實(shí)現(xiàn)增刪改查(使用Statement類)
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from user");
//4.處理數(shù)據(jù)庫(kù)的返回結(jié)果(使用ResultSet類)
while (rs.next()) {
System.out.println(rs.getString("user_name") + " "
+ rs.getString("user_password"));
}
//5.關(guān)閉資源
rs.close();
st.close();
conn.close();
}