JDBC-JDBC開發入門

前言

大概瞭解了什麼是JDBC後,接下來再具體瞭解一下幾個經常使用API功能.後面就可使用這些API執行SQL語句html

mysql驅動包

JDBC-idea導入mysql鏈接java的jar包java

按照上面文章的步驟操做完成後,比較"硬核"的準備工做就OK了,接下來就來了解一下經常使用的APImysql

API使用

註冊驅動/得到鏈接

JDBC-java鏈接mysql(基於mysql8.0)sql

註冊驅動

註冊驅動語句可省略
  • JDBC規範定義了驅動接口: java.sql.Driver
  • mysql8之前, mysql驅動包提供了實現類com.mysql.jdbc.Driver
  • mysql8+, mysql驅動包的實現類改成com.mysql.cj.jdbc.Driver
加載註冊驅動的方式 描述
Class.forName(數據庫驅動實現類) 加載和註冊數據庫驅動
// 代碼示例
public class JDBCTest01(){

    public static void main(String[] args){
            
            // 註冊驅動(基於mysql8.0)(可省略)
            Class.forName("com.mysql.jdbc.Driver");
    }
}

得到鏈接

  • Connection接口代碼一個鏈接對象.具體的實現類由數據庫的廠商實現
  • 使用DriverManager類的靜態方式getConnection能夠得到數據庫的鏈接
得到鏈接的靜態方法 說明
Connection getConnection(String url, String user, String password) 經過鏈接字符串, 用戶名, 密碼 來獲取數據庫鏈接對象
  • String url: mysql URL的格式jdbc:mysql://localhost:3306/數據庫名稱?其他參數
  • String user: 登陸數據庫的用戶名(通常是root)
  • String password: 登陸數據庫的密碼

[注]
參考Java MySQL鏈接 | 菜鳥編程
image.png數據庫

// 代碼示例
public class SqlConnection {

    public static void main(String[] args) throws Exception{

        // 1.註冊驅動
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 2.獲取鏈接 url, 用戶名, 密碼
        //"jdbc:mysql://localhost:3306/grasg?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        String DATABASE = "grasg";
        String USER = "root";
        String PASSWORD = "316426";
        String url = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        Connection con = DriverManager.getConnection(url,USER,PASSWORD);

        System.out.println(con);
    }
}

// 運行結果: com.mysql.cj.jdbc.ConnectionImpl@3c947bc5

獲取語句執行平臺

  • 經過ConnectioncreateStatement方法,獲取sql語句執行對象.(語句執行對象能夠理解爲"有權利執行sql的對象")編程

    Connection接口中的方法 說明
    Statement createStatement() 建立SQL語句執行對象
  • Statement: 表明一條語句對象,用於發送SQL語句給服務器,而後執行靜態SQL語句並返回它所生成的結果segmentfault

    Statement類 經常使用方法 說明
    int executeUpdate(String sql) 執行insert,update,delete語句.返回int類型,表明受影響的行數
    ResultSet executeQuery(String sql) 執行select語句,返回ResultSet結果集對象
// 代碼示例
public class SqlCreateTable {

    public static void main(String[] args) throws Exception{

        // 1. 註冊驅動
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 獲取鏈接
        String USER = "root";
        String PASSWORD = "316426";
        String DATABASE = "lianxi01";
        String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        // 3. 獲取語句執行平臺
        // 經過Connection的createStatement方法獲取sql語句執行對象
        Statement sqlState = conn.createStatement();
        // 4. 建立表
        String sql = "CREATE TABLE test_01(id int, name varchar(20),age int);";
        int i = sqlState.executeUpdate(sql);
        System.out.println("獲影響的行數爲 = " + i);
        System.out.println("SQL語句執行成功!");
        // 5.關閉流(後建立的先關閉)
        sqlState.close();
        conn.close();
    }
}

處理結果集(ResultSet接口)

只有在進行select查詢操做時,才須要處理結果集
ResultSet接口方法 說明
boolean next() 遊標向下一行; 返回boolean類型,若是還有下一條記錄,返回true,不然返回false
xxx getXxx(String or int) 參數是String類型:表示經過<列名/字段名>獲取數據; 參數是int類型:表示經過<列號/第幾列>獲取數據,從1開始
// 代碼示例
public class SqlSelect {

    public static void main(String[] args){
        Connection conn = null;
        Statement sqlExecute = null;
        ResultSet resultSet = null;

        try {
            // 1.註冊驅動 - 能夠省略
            //Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.鏈接數據庫並獲取鏈接
            String USER = "root";
            String PASSWORD = "316426";
            String DATABASE = "lianxi01";
            String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
            conn = DriverManager.getConnection(URL,USER,PASSWORD);
            // 3.獲取語句執行平臺(Statement對象)
            sqlExecute = conn.createStatement();
            // 4.執行select語句,返回的是一個ResultSet對象
            String sql = "select * from test_01;";
            resultSet = sqlExecute.executeQuery(sql);
            // 5.處理結果集
        /*System.out.println(resultSet.next());
        int id = resultSet.getInt("id");
        System.out.println("id = " + id);
        String name = resultSet.getString("name");
        System.out.println("name = " + name);
        int age = resultSet.getInt("age");
        System.out.println("age = " + age);*/
            int id;
            String name;
            int age;
            while(resultSet.next()){
                id = resultSet.getInt("id");
                name = resultSet.getString("name");
                age = resultSet.getInt("age");
                System.out.println("id = " + id + ", name = " + name + ", age = " + age);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 6.關閉流對象
            try {
                resultSet.close();
                sqlExecute.close();
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        System.out.println("一切都關了!");
    }
}

釋放資源

  • 須要釋放的對象: ResultSet結果集(只有在執行select查詢操做時纔出現結果集,才須要關閉), Statement對象, Connection對象
  • 釋放原則: 先建立的後關,後建立的先關. Result => Statement => Connection
  • 放在final塊中

image.png

步驟總結

  • 獲取驅動
  • 獲取鏈接
  • 獲取語句執行平臺,即Statement對象
  • 處理結果集(只在查詢時處理)
  • 關閉對象,釋放資源
相關文章
相關標籤/搜索