1. 程式人生 > 實用技巧 >MySQL筆記--JDBC

MySQL筆記--JDBC

MySQL筆記--JDBC

一、基本概念

Java database connection java 連線資料庫
Sun公司定義個用java連線所有資料庫的一組介面
不同資料庫廠商根據自己的資料庫 提供jdbc的實現類 用於實現與java連線---資料庫驅動


二、步驟

  1. 匯入驅動 jar 包
  2. 準備 JDBC 四大引數
    • 驅動類
    • 賬號
    • 密碼
    • 資料庫伺服器的 URL
      • URL 格式: 協議名稱/主機名:埠號/目錄/資源?請求引數
      • JDBC 的 URL : jdbc:mysql://localhost:3306/db_26
    String name ="root";
    // MySQL 使用者名稱
    String pwd = "root";
    	// MySQL 密碼
    String driverClass="com.mysql.jdbc.Driver";
    // 驅動
    String url="jdbc:mysql://127.0.0.1:3306/db_26"
    // URL
    
  3. 載入驅動類 com.sql.jabc.Driver
    Class.forName(URL);
    # 驅動類的全稱
    
  4. 獲取連結 Connection
    Connection con = DriverManager.getConneretcion(url,name,pwd);
    
  5. 通過 Statement 獲取 SQL 語句的傳送器物件
    Statement sta = con.createStatement();
    
  6. 準備 SQL 語句
    String sql = "select * from student";
    
  7. 通過 Statement 傳送 SQL 語句
    ResultSet set = sta.executeQuery(sql);
    
  8. 解析結果集
    // 通過 next 方法判斷 set 是否還有元素可以遍歷
    while(set.next()){
    // 獲取本行每列的資料
    
    // 指定列的索引,索引從 1 開始
    int sid  = set.getInt(1);
    // 指定列名
    String sname = set.getString("sname");
    }
    
  9. 關閉 連線
    set.close();
    sta.close();
    con.close();
    

三、常用的介面

  1. Class 對類和位元組碼檔案的封裝
    • 靜態方法:Class.forName("com.mysql.jdbc.Driver"); 於載入引數字元表示的類 類名必須是類的全稱
      • 可能丟擲異常: ClassNotFoundException
  2. DriverManager 驅動管理類
    • riverManager.getConnection(url,username,userPwd); 取url指定的資料庫伺服器的連線
      • 可能丟擲異常:QLException
  3. Connection 封裝連線的介面
    • 例項方法:onnection.createStatement();取sql語句發生器物件
    • 例項方法:onnection.close(); 關閉連線
  4. Statement 用於 Java 給 資料庫 傳送 SQL 語句
    • 例項方法:sultSet Statement.executeQuery(sql)執行select查詢 獲取結果集
    • 例項方法:nt Statement.executeUpdate(sql)執行dml/ddl查詢 獲取影響的行數
    • 例項方法:tatement.close(); 關閉
  5. ResultSet 封裝 select 的結果集
    • 例項方法:ResultSet Statement.executeQuery(sql) 執行select查詢 獲取結果集
    • 例項方法:int Statement.executeUpdate(sql) 執行dml/ddl查詢 獲取影響的行數
    • 例項方法:Statement.close();關閉
  6. 練習 通過 JDBC 實現 增刪更改查
Static ArrayList<Student> getAll();
Static Student getOne(int sid);
Static boolean addOne(Student s);
Static boolean UpdateOne(Student s);
Static boolean deleteOne(int sid); 

四、JDBC 工具類

package com.zhiyou100.javawebreview.jdbc.learn;

import java.sql.*;

/**
 * @packageName: MyUtilOfMySQL
 * @className: com.zhiyou100.javawebreview.jdbc.learn
 * @Description: TODO JDBC 工具類
 * @author: yang
 * @date: 7/14/20
 */
public class MyTool {
    {
        try {
            Class.forName(DRIVER_CLASS);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("載入驅動失敗");
        }
    }

    private static final String IP = "192.168.217.82";
    private static final String PORT = "3306";
    private static final String DATABASE_NAME = "db_26";
    private static final String USER_NAME = "root";
    private static final String USER_PASSWORD = "1";
    private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DATABASE_NAME;

    /**
     * @Description: TODO 獲取連線
     * @name: getConnection
     * @param: []
     * @return: java.sql.Connection
     * @date: 7/14/20 17:55
     * @author: yang
     */
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL, USER_NAME, USER_PASSWORD);
        } catch (SQLException throwable) {
            throw new RuntimeException("獲取連線失敗");
        }
    }

    /**
     * @Description: TODO 關閉  JDBC
     * @name: close
     * @param: [resultSet, statement, connection]
     * @return: void
     * @date: 7/14/20 19:07
     * @author: yang
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        if (resultSet == null) {
            // 如果 resultSet 為 null,關閉 後兩個
            close(statement, connection);
            return;
        }
        if (statement == null || connection == null) {
            throw new RuntimeException("statement 或者 connection 為 null");
        }
        try {
            resultSet.close();
        } catch (SQLException throwable) {
            throw new RuntimeException("resultSet 關閉失敗");
        }
        try {
            statement.close();
        } catch (SQLException throwable) {
            throw new RuntimeException("statement 關閉失敗");
        }
        try {
            connection.close();
        } catch (SQLException throwable) {
            throw new RuntimeException("connection 關閉失敗");
        }
    }


    /**
     * @Description: TODO 關閉 JDBC
     * @name: close
     * @param: [statement, connection]
     * @return: void
     * @date: 7/14/20 19:07
     * @author: yang
     */
    public static void close(Statement statement, Connection connection) {
        try {
            statement.close();
        } catch (SQLException throwable) {
            throw new RuntimeException("statement 關閉失敗");
        }
        try {
            connection.close();
        } catch (SQLException throwable) {
            throw new RuntimeException("connection 關閉失敗");
        }
    }


    public static void main(String[] args) throws SQLException {
//        Connection connection = getConnection();
//        Statement statement = connection.createStatement();
//        String sql = "select  * from student";
//        ResultSet resultSet = statement.executeQuery(sql);
//        while (resultSet.next()) {
//            int sid = resultSet.getInt("sid");
//            String sname = resultSet.getString("sname");
//            char sex = resultSet.getString("sex").charAt(0);
//            int sage = resultSet.getInt("sage");
//            int scid = resultSet.getInt("scid");
//            Student student = new Student(sid, sname, sex, sage, scid);
//            System.out.println(student);
//        }
//        close(resultSet, statement, connection);

        Connection connection = getConnection();
        Statement statement = connection.createStatement();
        String sql = "alter table tab_3 drop tname ";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        close(statement, connection);

    }
}

五、預編譯物件 preparedStatement

private static Student getOne(int sid) throws SQLException {
        Student student = new Student();
        Connection connection = getConnection();
        // 準備 sql 模版
        String sql = "select * from student where sid=?";
        // 傳送 sql 模版,獲取預編譯物件
        PreparedStatement statement = connection.prepareStatement(sql);
        // 設定 模版的的引數
        statement.setInt(1, sid);
        // 執行查詢語句,獲取結果集
        ResultSet resultSet = statement.executeQuery();
        // 處理結果集
        while (resultSet.next()) {
            sid = resultSet.getInt("sid");
            String sname = resultSet.getString("sname");
            char sex = resultSet.getString("sex").charAt(0);
            int sage = resultSet.getInt("sage");
            int scid = resultSet.getInt("scid");
            student = new Student(sid, sname, sex, sage, scid);

        }
        // 關閉連線
        close(resultSet, statement, connection);
        return student;
    }

六、其他