mysql jdbc入門學習,mysqljdbc入門

來源:互聯網
上載者:User

mysql jdbc入門學習,mysqljdbc入門
一、jdbc基本概念
jdbc : Java Database Connectivity
sun公司為了統一對資料庫的操作,定義了一套api,稱之為jdbc
這套api完全由介面組成,我們在編寫程式的時候針對介面進行調用
這些介面交給資料庫廠家去實現, 不同的資料庫廠商會提供不同的實作類別,
這些實作類別被我們稱作資料庫的驅動。

一流公司定標準
二流公司做服務
三流公司做產品

資料庫驅動交給資料庫廠商製作的優點:
    1.Java開發人員只需要維護Java應用和一套統一的規範
    2.資料庫廠商提供具體的Java驅動程式,資料庫廠商如果改變了
    資料庫底層的實現,資料庫廠商要隨之更新驅動程式,不會影響到
    已經完成的Java應用程式。

簡單來說使用Java代碼發送SQL語句的技術,就是jdbc

二、實現jdbc程式的條件
 1.需要知道串連資料庫伺服器所在地
         需要資料庫的IP地址和連接埠號碼
         ip定位到主機
         連接埠號碼:定位到程式
 2.需要知道資料庫的使用者名稱和密碼
 
三、如何?jdbc串連MySQL資料庫?
    1.匯入資料庫的驅動程式
        mysql-connector-java-5.0.8-bin.jar
    2.註冊資料庫的驅動
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    3.建立與mysql資料庫的串連
        String url = "jdbc:mysql://localhost:3306/test";//jdbc是主協議,mysql是子協議
        String user = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url, user, password);
    4.建立用於發送sql語句的 Statement 對象
        Statement stmt = conn.createStatement();
    5. 編寫SQL語句
        String sql = "select * from users";
    6.發送sql, 獲得結果集
        ResultSet rs = stmt.executeQuery(sql);
    7.處理結果集
        System.out.println("id | name   | password | email  | birthday");
        while(rs.next()) {
            // 有第一行
            int id = rs.getInt("id");    // 通過列名取值比較直觀
            String name = rs.getString("name");
            String psw = rs.getString("password");
            String email = rs.getString("email");
            Date birthday = rs.getDate("birthday");
            System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);
        }
    8.關閉資料庫連接,最後開啟的資源最先釋放,釋放之前需要判斷資源是否已經斷開
        rs.close();
        stmt.close();
        conn.close();
四、jdbc程式詳解
1. 註冊驅動
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    上面的語句會導致註冊兩次驅動
    原因在於,查看Driver類的源碼會發現在靜態代碼塊中完成了註冊驅動的工作,
    也就是說註冊驅動其實很簡單,只需要載入驅動類即可
    Class.forName(“com.mysql.jdbc.Driver”);
2. 建立資料庫的串連
    Connection conn = DriverManager.getConnection(url, user, password);
    其中:

    url, 相當於資料庫的訪問地址,程式員通過url指定需要訪問的資料庫

     //串連資料庫的url
    //jdbc主協議,mysql是子協議
    //jdbc協議:資料庫子協議://主機:連接埠號碼:/資料庫名

    jdbc:mysql:[]//localhost:3306/test?參數名:參數值
    其中jdbc為主協議,mysql為子協議,localhost為主機名稱,3306為連接埠號碼,test為資料庫名
    url的後面可以跟參數,常用的參數有:user=root&password=root&characterEncoding=UTF-8

    如果url地址後面跟了user和password,建立Connection對象時將不必再次傳入值
    Connection conn = DriverManager.getConnection(url);

    補充說明: 如果訪問的localhost:3306,url 可省寫為jdbc:mysql:///test
3. Connection 對象
    Connection對象用於表示與某個資料庫之間的串連,在程式中對資料庫的所有操作都需要通過此對象來完成
    常用方法有:
    createStatement():建立向資料庫發送sql的statement對象。
    prepareStatement(sql) :建立向資料庫發送先行編譯sql的PrepareSatement對象。
    prepareCall(sql):建立執行預存程序的callableStatement對象。
    setAutoCommit(boolean autoCommit):設定事務是否自動認可。
    commit() :在連結上提交事務。
    rollback() :在此連結上復原事務。

4. Statement 對象
    用於向資料庫發送sql語句
    execute(String sql):用於向資料庫發送任意sql語句
    executeQuery(String sql) :只能向資料發送查詢語句。(常用)
    executeUpdate(String sql):只能向資料庫發送insert、update或delete語句(常用)
    addBatch(String sql) :把多條sql語句放到一個批處理中。
    executeBatch():向資料庫發送一批sql語句執行。

5. ResultSet 對象
    對於查詢操作,該對象特別重要,因為它專門用於封裝結果集
    儲存的形式就是一種表格的形式,同樣是列+行,說白了就和我們在 dos 命令列視窗查詢的結果一樣

    遍曆方式:
    一開始遊標指向結果集第一行, 也就是表頭
    通過 next 將遊標移向下一行, 如果沒有下一行,該方法會返回false
    獲得當前行的資料需要調用get方法:
    get(int index)獲得第幾列  列數從1開始
    get(String columnName) 根據列名獲得值  常用

    注意:資料庫的資料類型與java中資料類型的對應關係

   
    ResultSet對象的常用方法
    next():移動到下一行
    previous():移動到前一行
    absolute(int row):移動到指定行
    beforeFirst():移動resultSet的最前面。
    afterLast() :移動到resultSet的最後面。
6. 釋放資料庫資源
    因為資料允許的並發訪問串連數量往往都比較有限,使用完成後,需要釋放資源

    在java程式中,我們應該將最終必須要執行的代碼放到finally當中
    釋放資源的代碼
    if(rs!=null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        rs = null;
    }

    if(stmt!=null) {
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        stmt = null;
    }

    if(conn!=null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        conn = null;
    }
    
7. 防止 sql 注入
    在 service 層進行邏輯判斷
    使用PreparedStatement對象

 


package cn.test.jdbc.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;



import com.mysql.jdbc.Driver;

public class JDBCDemo {
    //串連資料庫的url的寫法
    //jdbc主協議,mysql是子協議
    //jdbc協議:資料庫子協議://主機:連接埠號碼:/資料庫名
    private String url="jdbc:mysql://localhost:3306/day15";
    //使用者名稱
    String username = "root";
    //密碼
    String password = "Name-66437";
    @Test
    public void main(String [] args) throws SQLException{
        //1.建立一個驅動程式的類對象
        Driver driver = new com.mysql.jdbc.Driver();
        //設定使用者名稱和密碼
        Properties props = new Properties();
        props.setProperty("username", username);
        props.setProperty("password", password);
        
        //2.串連資料庫
        Connection conn = driver.connect(url, props);
        Statement stmt = conn.createStatement();
        String sql = "select * from student";
        ResultSet rs = stmt.executeQuery(sql);
        //7.處理結果集
        System.out.println("id | name   | password | email  | birthday");
        while(rs.next()) {
            // 有第一行
            int id = rs.getInt("id");    // 通過列名取值比較直觀
            String name = rs.getString("name");
            String psw = rs.getString("password");
            String email = rs.getString("email");
            Date birthday = rs.getDate("birthday");
            System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);
        }
        //釋放資源的代碼
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }

        if(stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }

        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
}

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.