JDBC第一課-簡介及開發第一個JDBC程序

簡介:

         jdbc: java語言操作數據庫的技術.[實際是操作某些對象的方法]

        JDBC: 一套Java訪問數據庫的接口,通用訪問接口,可以訪問任何關係型數據庫(Oracle MySQL DB2 ...)

常用API講解

常見接口:

java.sql.Connection: 數據庫連接,只有獲得connection對象,才連接上數據庫.

java.sql.PreparedStatement: 發送sql語句的工具, 具備發送sql的功能(方法)

java.sql.ResultSet: 結果集: 接收數據庫執行查詢sql返回的查詢結果.

java.sql.Driver: 驅動類: 訪問數據庫的不同方式, 不同的數據庫會自動提供具體的接口實現類.

java.sql.DriverManager: 管理多個驅動.

 

核心編程思想

假如有一個需求: 向 t_person 表添加一條數據?

先創建好t_person表:

create table t_person(
       id number(10) primary key,
       name varchar2(50),
       sex number(1),
       age number(3),
       mobile varchar2(11),
       address varchar2(200)
);

 


JDBC訪問數據庫的步驟

  1. 數據庫客戶端訪問數據庫的步驟

    ① 連接數據庫 用戶名 密碼

    ② 打開發送sql語句的工具(窗口)

    ③ 準備sql語句, 發送sql語句.

    ④ 如果發送的查詢select語句, 接收數據庫的查詢結果.

    ⑤ 釋放數據庫資源: 接收查詢結果 發送sql工具關閉 數據連接斷開.【原則:後打開的先關閉】

  2. JDBC訪問數據庫的步驟【重點】

    ① 連接數據庫 [獲得數據庫連接 Connection], 用戶名 密碼

    ② 創建sql發送的工具 [PreparedStatement]

    ③ 準備sql語句, 執行發送.PreparedStatement中executeXxxx()方法

    ④ 如果發送的查詢select語句,接收查詢結果 [ResultSet]

    ⑤ 釋放資源: ResultSet PreparedStatement Connection


    瞭解步驟之後,我們來開發第一個JDBC案例【java代碼實現】

    還是那個需求需求: 向 t_person表添加一條數據?

    insert into t_person values(100,'張三',1,18,'15533334898','河南鄭州');

    思路圖如下: 

     

    JDBC操作步驟:正式開始之前,先把Oracle的驅動jar包導入項目中。

        ojdbc?.jar: 存放是oracle提供的jdbc接口的實現類和功能代碼.
        版本: ojdbc5(jdk5)   ojdbc6(jdk6)    ojdbc14(jdk1.4)
        
        操作: 
        ① 將jar拷貝在項目中.   項目--右鍵--new--folder--命令 lib, 將jar拷貝在當前目錄.
        ② 將jar導入classpath中,   jar--右鍵---buildpath--add to buildpath

    下面是開發步驟【重點】 

    // 1. 加載驅動
    Class.forName("oracle.jdbc.OracleDriver");
    // 2. 獲得數據庫連接 connection
    /* DriverManager.getConnection("url","user","password");
     * url: jdbc遠程訪問oracle的路徑. 固定: jdbc:oracle:thin:@數據庫的ip地址:1521:xe[企業版把xe換成orcl]
     */
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
    // 3. 創建發送sql的工具 PreparedStatement
    // conn.prepareStatement("sql語句");
    String sql = "insert into t_person values(101,'張三',1,20,'12345678911','河南鄭州')";// sql結尾不能有分號.
    PreparedStatement pstm = conn.prepareStatement(sql);
    // 4. 準備sql,發送sql
    // executeUpdate(): 用來發送增刪改sql語句, 返回值int代表數據庫影響的數據行數.
    pstm.executeUpdate();
    // 5. 如果是查詢,接收查詢結果,並處理.【下面會有專門處理結果集的代碼演示】
    // 6. 釋放資源. ResultSet PreparedStatement Connection 先打開的後關閉.
    if (pstm != null) pstm.close();
    if (conn != null) conn.close();  

    ResultSet結果集

    需求: 查詢id爲100的person信息?

    select id,name,sex,age,mobile,address from t_person where id = 100;

    ResultSet

    結果集, 存放查詢結果.[存放查詢語句執行後的結果,列名顯示的select指定列名,未必是表的列名]

    發送查詢語句:

    //發送查詢的sql,將Oracle返回的查詢結果,封裝在ResultSet對象中返回,.
    PreparedStatement executeQuery();//發送查詢語句,返回值就是ResultSet.

    方法:

    1. next() 移動resultSet的遊標,下移一位, 並且通過返回值確定當前行是否有數據.

    2. getXxxx("查詢結果列名")---獲得rs遊標指向的當前行, 列名對應的數據.

    3. getXxxx(列序號)---獲得rs遊標指向的當前行,列序號對應的數據。

    //1.加載驅動
    Class.forName("oracle.jdbc.OracleDriver");
    //2.獲得數據庫連接 --Connection
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
    //3.準備發送SQL的工具--PreparedStatement
    String sql = "select id,name,sex,mobile from t_person";
    PreparedStatement pstm = conn.prepareStatement(sql);
    //4.發送SQL--executeQuery()
    ResultSet rs = pstm.executeQuery();
    //5.處理結果集--ResultSet
    while(rs.next()){
        int id  = rs.getInt("id");
        String name = rs.getString("name");
        int sex = rs.getInt(3);
        String mobile = rs.getString(4);
        System.out.println("[id:"+id+",name:"+name+",sex:"+sex+",mobile:"+mobile+"]");
    }
    //6.關閉資源
    if(rs != null) rs.close();
    if(pstm != null) pstm.close();
    if(conn != null) conn.close()

    最後是一些JDBC方法整理:

    DriverManager: //管理驅動
        Class.forName("oracle.jdbc.OracleDriver")    //管理驅動
        getConnection(url,user,password); //獲得Connection對象[url user password]
    Connection: 代表數據庫連接.
        prepareStatement(sql語句)  //創建發送sql的工具
        close() //關閉conn資源
    PreparedStatement 發送sql的工具
        executeUpdate() //發送sql語句,返回值int,數據庫影響數據條數.
    ResultSet ?
        next() 移動resultSet的遊標,下移一位, 並且通過返回值確定當前行是否有數據.
        getXxxx("查詢結果列名")---獲得rs遊標指向的當前行, 列名對應的數據.
        getXxxx(列序號)---獲得rs遊標指向的當前行,列序號對應的數據.
    ​
    

     

     

     

     

     

     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章