標籤:
 
參考  hu_shengyang的專欄 : http://blog.csdn.net/hu_shengyang/article/details/6290029
 
JDBC API中提供的常用資料庫編程的類和介面如下
 
1.Driver 介面:代表驅動程式
2.DriverManager 類:驅動程式管理員
3.Connection 介面:代表資料庫連接
4.Statement 、PreparedStatement、CallableStatement 介面:代表資料庫操作對象
5.ResultSet 介面:代表結果集
6.DatabaseMetadata、ResultSetMetadata介面:代表中繼資料
7.Types 類:代表JDBC類型
 
詳細解釋
2.DriverManager類
  DriverManager類管理一組JDBC驅動程式的基本服務,跟蹤可用的驅動程式,並在資料庫和相應驅動程式之間建立串連,處理諸如驅動程式登入時間限制及登入和跟蹤訊息的顯示等事務。
  首先使用DriverManager類載入磁碟機,使用該類的DriverManager.registerDriver(Driver driver)方法註冊磁碟機。(registerDriver方法是靜態方法,可用類名直接調用)。
  有兩種方法載入磁碟機
 (1)DriverManager.registerDriver(Driver driver),則在DriverManager的驅動程式列可用於建立串連
 (2)通過調用方法Class.forName()顯示載入驅動程式類。由於與外部設定無關,推薦
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";class.forName(driver);
  常用方法:DriverManager.getConnection(),參數不同,有以下幾種
DriverManager.getConnection(String url);
DriverManager.getConnection(String url, String user , String password); //user為資料庫使用者名稱,password為資料庫密碼
 
3.Connection介面
當調用DriverManager.getConnection方法發出串連請求時,DriverManager將檢查每個驅動程式是否可以建立串連,返回一個Connection資料庫連接對象。
createStatement()方法建立一個State對象來將SQL語句發送到資料庫,不帶參數的SQL語句通常使用Statement對象執行,如果多次執行相同SQL語句,可以使用PreparedStatement方法
  例:Statement stmt = dbConn.createStatement();
 
4.Statement介面
發送SQL語句到資料庫中。
JDBC有3種Statement對象,Statement 、PreparedStatement(繼承自Statement)、CallableStatement(繼承自PreparedStatement)
Statement介面提供了3種執行SQL語句的方法
(1)executeQuery()  用於產生單個結果集語句,如select,返回單個ResuleSet對象
(2)executeUpdate()  執行INSERT,UPDATE,DELETE語句等資料操作語言以及CREATE TABLE和DROP TABLE等資料定義語言 (Data Definition Language)
(3)execute()  執行返回多個結果集、多個更新或者二者組合的語句
 
5.ResultSet介面
包含符合SQL語句中條件的所有行,並且通過一套get方法提供了對這些行中資料的訪問。
ResultSet.next移動到結果的下一行記錄  getXXX()擷取指定列中的資料
 
 
三、JDBC應用程式的基本步驟:
1.註冊驅動
2.建立資料庫連接
3.建立資料庫操作對象
4.執行SQL
5.處理結果集
6.關閉JDBC對象
 
1.註冊一個驅動driver
         註冊驅動程式的三種方式:
         方式一:Class.forName("Oracle.jdbc.driver.OracleDriver");
         方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver();
                   DriverManager.registerDriver(driver);
         方式三:編譯時間在虛擬機器中載入驅動
                   javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java
                   java -D jabc.drivers = 驅動全名   類名
                   使用系統屬性名,載入驅動 -D表示為系統屬性賦值
              附:mysql 的Driver全名:com.mysql.jdbc.Driver
                   sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver
2.建立串連     
         conn=DriverManager.getConnection
                   ("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password");
    上面括弧中放的是:oracle自協議[email protected]+ip:port / 資料庫執行個體名,資料庫使用者名稱,使用者密碼。
    mysql url寫法:jdbc:mysql://192.168.254:3306/test
    SQLServer url寫法:jdbc:sqlserver://localhost:1433; DatabaseName=ztest
其他資料的補充(未證實正確性)
  Oracle(thin模式):jdbc:oracle:thin:@localhost:1521:orcl   //orcl為資料庫的SID
  Sybase:jdbc:sybase:Tds:localhost:5007/myDB       //myDB為資料庫名
  DB2: jdbc:db2://localhost:5000/myDB
  MySQL: jdbc:mysql://localhost/myDB?user=soft&password=123&useUnicode=true&characterEncoding=8859_1
3.獲得一個Statement對象
        sta = conn.createStatement();
4.通過Statement執行sql語句
        sta.excuteQuery(sql);//返回一個查詢結果集
        sta.executeUpdate(sql);//傳回值為 int 型,表示影響記錄的條數
        將sql語句通過串連發送到資料庫中執行,以實現對資料庫的操作。
5.處理結果集
        使用Connection對象獲得一個Stagement,Statement中的executeQuery(String sql)方法可以使用select語句查詢,並返回一個結果集 ResultSet 。通過遍曆這個結果集,可以獲得select語句的查詢結果。ResultSet的next()方法會操作一個遊標從第一條記錄開始讀取,直到最後一天記 錄。 executeUpdate(String sql)方法用於執行 DDL /DML 語句,比如update,delete等。
         只有select語句才有返回結果集。
         例:Statement sta = con.createStatement(); //建立statement對象
              String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") ";
              sta.executeUpdate(sql); //執行sql語句
              String sql = "select * from test";
              ReslutSet rs = sta.executeQuery(sql);//執行sql語句後有結果集
              //遍曆處理結果集
              while(rs.next()){
                   System.out.println(rs.getInt("id"));
                   System.out.println(rs.getString("name"));
              }
6.關閉資料庫連接(釋放資源)
   調用close()方法:
        rs.close();         
        sta.close();          
        conn.close();
        ResultSet 、Statement 和Connetction是依次依賴的。
        注意:要按先 ResultSet ,再Statement,最後Connetction的順序關閉資源。因ResultSet和Statement在串連的情況下才能使用,所以在連使用束 後可能還有其他的statement還在串連,所以不能先關閉Connection。
 
 
======================================
 
舉例
 
在sqlserver內建立資料庫ztest,運行下面的語句
建表:
create table Student(
  sno char(9) PRIMARY KEY,
  sname char(20),
  ssex char(2)
)
插入資料:
insert into Student values(‘1000001‘,‘張一‘,‘m‘);
insert into Student values(‘1000002‘,‘張二‘,‘f‘);
insert into Student values(‘1000003‘,‘張三‘,‘f‘);
insert into Student values(‘1000004‘,‘張四‘,‘f‘);
insert into Student values(‘1000005‘,‘張五‘,‘m‘);
insert into Student values(‘1000006‘,‘張六‘,‘f‘);
insert into Student values(‘1000007‘,‘張七‘,‘m‘);
insert into Student values(‘1000008‘,‘張八‘,‘m‘);
public class Test {public static void main(String[]args) {String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  //載入JDBC驅動String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=ztest";  //串連伺服器和資料庫testString userName = "sa";  //預設使用者名String userPwd ="123";  //密碼Connection dbConn = null;try {Class.forName(driverName);dbConn = DriverManager.getConnection(dbURL, userName, userPwd);System.out.println("Connection Successful!");  //如果串連成功 控制台輸出Connection Successful!} catch (Exception e) {e.printStackTrace();System.out.println("串連失敗...");}try {Statement stmt = dbConn.createStatement();stmt.executeUpdate("insert into Student values(‘22222222‘,‘李四‘,‘m‘);");ResultSet rs = stmt.executeQuery("select * from student");while(rs.next()){System.out.println(rs.getString("sno")+" "+rs.getString("sname")+" "+rs.getString("ssex"));}} catch (SQLException e) {e.printStackTrace();}}}
  
控制台結果
Connection Successful!1000001   張一                 m 1000002   張二                 f 1000003   張三                 f 1000004   張四                 f 1000005   張五                 m 1000006   張六                 f 1000007   張七                 m 1000008   張八                 m 22222222  李四                 m 
 
Java學習筆記--JDBC資料庫的使用