JDBC鏈接MySQL

一、加載JDBC驅動程序java

     鏈接數據庫以前,首先須要調用Class 的forName 方法加載數據庫的JDBC 驅動程序。mysql

    例如加載MySQL的驅動程序:sql

    Class.forName("com.mysql.jdbc.Driver");//經過java.lang.Class類中的靜態方法forName()動態實現加載數據庫驅動到JVM中數據庫

    加載驅動程序後,就可使用DriverManager.getConnection 方法創建與數據庫的鏈接,獲得Connection 對象,Connection 對象表明與數據庫的鏈接。服務器

     DriverManager類是JDBC的管理層,做用於用戶和驅動之間。它跟蹤可用的驅動程序,並在數據庫和相應驅動程序之間創建鏈接。另外,DriverManager 類也處理諸如驅動程序登陸時間限制及登陸和跟蹤消息的顯示等事務。url

 // 此方法爲獲取數據庫鏈接
    public static Connection getConnection() {
        Connection conn = null;
        try {
            String driver = "com.mysql.jdbc.Driver"; // 數據庫驅動
            String url = "jdbc:MySQL://127.0.0.1:3306/student";
            //127.0.0.1是主機名(或者寫成localhost);3306是MySQL服務器的端口;student是數據庫的庫名
            String user = "root"; // 用戶名
            String password = ""; // 密碼
            Class.forName(driver); // 加載數據庫驅動
            if (null == conn) {
                conn = (Connection) DriverManager.getConnection(url, user, password);
                //建立數據庫的鏈接 ,conn就表明一個數據庫的鏈接。
            }
        } catch (ClassNotFoundException e) {
            System.out.println("加載驅動失敗!");
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

二、 Statementspa

      Statement 對象提供了執行SQL 語句和獲取結果的基本方法。Statement 對象能夠經過調用Connection 對象的createStatement 方法來建立,例如:Statement stmt = cn.createStatement();code

      Statement實例有3種類型:對象

         (1)執行靜態SQL語句。一般經過Statement實例實現。接口

        (2)執行動態SQL語句。一般經過PreparedStatement實例實現。

        (3)執行數據庫存儲過程。一般經過CallableStatement實例實現。(不常常用)

          具體的實現方式:   

          Statement stmt = con.createStatement() ;   

          PreparedStatement pstmt = con.prepareStatement(sql) ; //sql能夠動態傳遞參數

           CallableStatement cstmt =con.prepareCall("") ;   

   Statement 對象的executeUpdate 方法執行對數據庫的增、刪、改等對數據庫有改動的操做;

   Statement 對象的executeQuery 方法執行對數據庫的查詢操做,獲得結果集ResultSet 對象。

三、ResultSet

    (1)ResultSet對象用來存放查詢結果

        ResultSet rs = stmt.extcuteQuery(sql);

    (2)  ResultSet對象的next方法(rs.next()):用於移動到結果集的下一行,有下一行則返回值爲true

    (3) ResultSet對象的getXXX方法獲取當前某一列的值,參數能夠是列號或列名,例如:getInt , getString  

          while(rs.next()) {

                 System.out.print(rs.getInt("id") + "\t");

                 System.out.print(rs.getString("name") + "\t");

         }

四、關閉JDBC對象

 /**
     * 釋放ResultSet
     * @param rs
     */
    public static void free(ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException err) {
            err.printStackTrace();
        }
    }
    /**
     * 釋放Statement
     * @param st
     */
    public static void free(Statement st) {
        try {
            if (st != null) {
                st.close();
            }
        } catch (SQLException err) {
            err.printStackTrace();
        }
    }
    /**
     * 釋放Connection
     * @param conn
     */
    public static void free(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException err) {
            err.printStackTrace();
        }
    }
    /**
     * 釋放全部 
     * @param rs
     * @param st
     * @param conn
     */
    public static void free(ResultSet rs, Statement st, Connection conn) {
        free(rs);
        free(st);
        free(conn);
    }

5 、JDBC的核心API

|- Driver : 驅動程序類實現的接口。

  |-Connection connect(String url, Properties info)  --用於鏈接數據庫,獲得鏈接對象

Properties 裏須要設置的參數:

    url: 數據庫鏈接的URL字符串。協議+數據庫子協議+主機+端口+數據庫

    user: 數據庫用戶名

    password: 用戶的密碼

  |-Connection :    與數據庫鏈接的接口

      |- Statement createStatement()   --建立Statement對象,用於發送sql語句

      |- PreparedStatement prepareStatement(String sql)  -建立PreparedStatement對象,用於發送預編譯的sql語句

      |-CallableStatement prepareCall(String sql)  --建立CallableStatement對象,用於調用存儲過程。

      |-Statement: 用於執行靜態sql語句

          |-int executeUpdate(String sql)  --執行更新操做(DDL+DML)

          |-ResultSet executeQuery(String sql)  --執行查詢操做(DQL)

      |- PreparedStatement: 用於執行預編譯的sql語句

          |- int executeUpdate() -- 執行更新操做

          |- ResultSet executeQuery()    -- 執行查詢操做

      |- CallableStatement: 用於執行存儲過程的sql

          |- ResultSet executeQuery()  --調用存儲過程

          |- ResultSet: 結果集。用於封裝數據庫的查詢後的數據

              |- boolean next() --將記錄光標移動到下一行

              |- Object getObject(int columnIndex) -- 獲得字段上的值

相關文章
相關標籤/搜索