程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 01.JDBC入門

01.JDBC入門

編輯:DB2教程

01.JDBC入門


一、JDBC入門 1.JDBC簡介 JDBC, 即Java Database Connectivity,JDBC 為工具/數據庫開發人員提供了一個標准的 API,使他們能夠用純Java API 來編寫數據庫應用程序。即Java數據庫編程接口,是一組標准的Java語言中的接口和類,使用這些接口和類,Java客戶端程序可以訪問各種不同類型的數據庫,比如建立數據庫連接、執行SQL語句進行數據的存取操作。 JDBC規范采用接口和實現分離的思想設計了Java數據庫編程的框架。接口包含在java.sql及javax.sql包中,其中java.sql屬於JavaSE,javax.sql屬於JavaEE。這些接口的實現類叫做數據庫驅動程序,由數據庫的廠商或其它的廠商或個人提供。 為了使客戶端程序獨立於特定的數據庫驅動程序,JDBC規范建議開發者使用基於接口的編程方式,即盡量使應用僅依賴java.sql及javax.sql中的接口和類。 \
2.JDBC驅動程序 JDBC驅動程序(訪問數據庫編程接口的實現類),即各個數據庫廠家根據JDBC的規范制作的JDBC實現類。 JDBC類結構: ◆DriverManager:是一個實現類,它是一個工廠類(類的結構設計模式為工廠方法),用來生產數據庫Driver對象; ◆Driver:驅動程序對象的接口,它指向一個實實在在的數據庫驅動程序對象,數據庫對象通過調用DriverManager的getDriver(String URL)獲得驅動程序對象,該方法在各個數據庫廠商按JDBC規范設計的數據庫驅動程序包裡的類中靜態實現的; ◆Connection:通過該接口實現連接到數據庫的對象,通過DriverManager工廠的getConnection(String URL)方法獲得; ◆Statement:用於執行靜態的SQL語句的接口,通過Connection中的createStatement方法得到的 ◆Resultset:用於指向結果集對象的接口,結果集對象是通過Statement中的execute等方法得到的
二、Java使用JDBC訪問數據庫的步驟 創建一個以JDBC連接數據庫的程序,包含7個步驟:

1.加載數據庫驅動程序到JVM 在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(String className)實現,成功加載後會將Driver類的實例注冊到DriverManager類中。例如:
try{ //加載MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驅動程序類 ,加載驅動失敗!"); e.printStackTrace() ; } 注:com.mysql.jdbc.Driver,即為MySQL數據庫驅動類,位於mysql-connector-java-3.1.11-bin.jar中com.mysql.jdbc包中的Driver.class(類)。

2.提供JDBC連接的URL 連接URL定義了連接數據庫時的協議、子協議、數據源標識。 書寫形式:協議:子協議:數據源標識 協議:在JDBC中總是以jdbc開始; 子協議:是橋連接的驅動程序或是數據庫管理系統名稱; 數據源標識:標記找到數據庫來源的地址與連接端口; 例如:(MySql的連接URL) jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
其中,test為數據庫名稱;useUnicode=true表示使用Unicode字符集,如果characterEncoding設置為gb2312或GBK,本參數必須設置為true;characterEncoding=gbk為字符編碼方式。

3.創建數據庫的連接 要連接數據庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個數據庫的連接。使用DriverManager的getConnectin(String url , String username ,String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼來獲得。例如:
//連接MySql數據庫,用戶名和密碼都是root String url = "jdbc:mysql://localhost:3306/test" ; String username = "root" ; String password = "root" ; try{
Connection con =
DriverManager.getConnection(url , username , password ) ; }catch(SQLException se){ System.out.println("數據庫連接失敗!"); se.printStackTrace() ; }

4.創建一個Statement 要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型: (1)執行靜態SQL語句,通常通過Statement實例實現; (2)執行動態SQL語句,通常通過PreparedStatement實例實現; (3)執行數據庫存儲過程,通常通過CallableStatement實例實現; 具體的實現方式:
Statement stmt = con.createStatement() ; //執行靜態SQL語句
PreparedStatement pstmt = con.prepareStatement(sql) ; //執行動態SQL語句
CallableStatement cstmt =con.prepareCall("{CALL demoSp(? , ?)}") ; //執行存儲過程

5.執行SQL語句 Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute (1)ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句,返回一個結果集(ResultSet)對象; (2)int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句 如:CREATE TABLE和DROP TABLE等 (3)execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。 具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;

6.處理結果 兩種情況:(1)執行更新返回的是本次操作影響到的記錄數。(2)執行查詢返回的結果是一個ResultSet對象。 ? ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問: ? 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){ //返回的結果集為一系列行(記錄)數據
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
} (列是從左到右編號的,並且從列1開始)

7.關閉JDBC對象 操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反: (1)關閉記錄集 (2)關閉聲明 (3)關閉連接對象
if(rs != null){ // 關閉記錄集 try{
rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 關閉聲明 try{
stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 關閉連接對象 try{
conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } 總結1:加載不同數據庫驅動到JMV代碼 (1)Oracle數據庫:Class.forName("oracle.jdbc.driver.OracleDriver"); (2)Sql Server數據庫:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); (3)MySQL數據庫 :Class.forName("com.mysql.jdbc.Driver"); (4)Access數據庫:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 總結2:創建數據庫連接字符串格式 Connection con=DriverManager.getConnection("數據庫JDBC URL", "數據庫用戶名","數據庫密碼");
\
三、常用數據庫的驅動程序及JDBC URL

1.Oracle數據庫 (1)驅動程序包名:ojdbc14.jar (2)驅動類的名字:oracle.jdbc.driver.OracleDriver (3)JDBC URL:jdbc:oracle:thin:@dbip:port:databasename 說明:驅動程序包名有可能會變 JDBC URL中黑色字體部分必須原封不動的保留,為該驅動識別的URL格式。紅色字體部分需要根據數據庫的安裝情況填寫。其中各個部分含義如下: dbip –為數據庫服務器的IP地址,如果是本地可寫:localhost或127.0.0.1。 port –為數據庫的監聽端口,需要看安裝時的配置,缺省為1521。 databasename –為數據庫的SID,通常為全局數據庫的名字。 舉例如果要訪問本地的數據庫allandb,端口1521,那麼URL寫法如下: jdbc:oracle:thin:@localhost:1521:allandb 

2.SQL Server數據庫 (1)驅動程序包名:msbase.jar mssqlserver.jar msutil.jar (2)驅動類的名字:com.microsoft.jdbc.sqlserver.SQLServerDriver (3)JDBC URL:jdbc:microsoft:sqlserver://dbip:port;DatabaseName=databasename 說明:驅動程序包名有可能會變 JDBC URL中黑色字體部分必須原封不動的保留,為該驅動識別的URL格式。紅色字體部需要根據數據庫的安裝情況填寫。其中各個部分含義如下: dbip –為數據庫服務器的IP地址,如果是本地可寫:localhost或127.0.0.1。 port –為數據庫的監聽端口,需要看安裝時的配置,缺省為1433。 databasename –數據庫的名字。 舉例如果要訪問本地的數據庫allandb,端口1433,那麼URL寫法如下: jdbc: microsoft: sqlserver:@localhost:1433; DatabaseName =allandb 

3. MySQL數據庫 (1)驅動程序包名:mysql-connector-java-3.1.11-bin.jar (2)驅動類的名字:com.mysql.jdbc.Driver (3)JDBC URL:jdbc:mysql://dbip:port/databasename 說明:驅動程序包名有可能會變 JDBC URL中黑色字體部分必須原封不動的保留,為該驅動識別的URL格式。紅色字體部需要根據數據庫的安裝情況填寫。其中各個部分含義如下: dbip –為數據庫服務器的IP地址,如果是本地可寫:localhost或127.0.0.1。 port –為數據庫的監聽端口,需要看安裝時的配置,缺省為3306。 databasename –數據庫的名字。 舉例如果要訪問本地的數據庫allandb,端口1433,那麼URL寫法如下: jdbc:mysql://localhost:3306/allandb 

4.Access數據庫 (1)驅動程序包名:該驅動程序包含在JavaSE中,不需要額外安裝。 (2)驅動類的名字:sun.jdbc.odbc.JdbcOdbcDriver (3)JDBC URL:jdbc:odbc:datasourcename 說明:該驅動只能工作在Windows系統中,首先需要在操作系統中建立一個可以訪問Access數據庫的本地數據源(ODBC),如果名字為allandb,那麼URL寫法如下: jdbc:odbc:allandb 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved