1. 程式人生 > >Java資料庫連線

Java資料庫連線

JDBC概述:

JDBC(Java DataBase Connectivity): java資料庫連線;          使用java程式 , 執行sql語句, 對資料進行增刪改查(CURD)。

使用jdbc需匯入jar包: mysql的驅動mysql-connectorjava-5.1.37-bin.jar

JDBC規範(掌握四個核心物件):

  • DriverManager : 用於註冊驅動.
  • Connection : 表示與資料庫建立的連線.
  • Statement : 操作資料庫sql語句的物件.
  • ResultSet : 結果集.

使用步驟: 6步

1.註冊驅動

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不用.          在com.mysql.jdbc.Driver類中,有個靜態程式碼塊          static {    // 建立Driver物件會執行靜態程式碼塊註冊了一次驅動                   DriverManager.registerDriver(new Driver());          }    原因: 導致驅動被註冊了2次.

解決: 獲取class檔案物件,會執行靜態程式碼塊 , 所以用反射技術.           Class.forName(“com.mysql.jdbc.Driver”);

2.獲取資料庫連線物件Connection

使用客戶端去連線伺服器,需要經過3次握手.          DriverManager.getConnection(url , user , password ): 與資料庫建立連線.          url: 需要連線資料庫的位置(jdbc:mysql://localhost:埠號/庫名)          user: 使用者名稱          password: 密碼

3.獲取執行者物件Statement

Statement createStatement(); //建立操作sql語句的物件. 例: Statement stmt = conn.createStatement();

4.執行sql語句,並返回結果.

String sql = “sql語句”; 常用方法:          int executeUpdate(String sql): - - 執行insert , update , delete 語句.          ResultSet executeQuery(String sql): 執行select語句.

5.處理結果集(select的結果)

rs.next( ) ; / / 判斷是否有下一個元素. rs.getXxx( “欄位名” ) : / / 取出結果

常用方法:

  • Object getObject(int index) / getObject(String name) 獲得任意物件
  • String getString(int index) / String getString(String name) 獲得字串
  • int getInt(int index) / int getInt(String name) 獲得整數.

6.釋放資源

使用後的東西都需要關閉!關閉的順序是先得到的後關閉,後得到的先關閉. rs.close( ) ; stmt.close( ) ; conn.close( );

原生 jdbc 6步:

public class Demo01JDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1. 註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 獲取資料庫連線物件Collection.
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day03","root","root");
        // 3. 獲取執行物件Statement
        Statement stmt = conn.createStatement();
        // 4. 使用執行物件執行sql語句, 執行結果 .
        int row = stmt.executeUpdate("INSERT INTO users(username,PASSWORD) VALUES('柳巖','1234');");
        System.out.println(row);
        // 5. 釋放資源.
        stmt.close();
        conn.close();
    }
}

因為 " 獲取資料庫連線 " 和 " 釋放資源 " 的操作 , 經常用 , 所以可以封裝工具類JDBCUtils , 從而達到程式碼的重複利用.

import java.sql.*;

/*
    建立JDBC工具類,工具類中的方法一般都是靜態的,方法我們直接通過類名使用
    定義兩個方法
        一個方法用於獲取資料庫連線物件Connection並返回
        一個方法用於釋放資源
 */
public class JDBCUtil {
    // 定義4個靜態的成員變數 , 儲存資料庫連線的相關資訊 .
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/day03";
    private static String username = "root";
    private static String password = "root";

    // 建立靜態程式碼塊 , 裡面的程式碼只執行一次 , 優先執行.
    static {
        try {
            // 註冊驅動 . 
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 定義一個方法,用於獲取資料庫連線物件Collection
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            /*
                如果獲取資料庫連線物件Connection失敗了,返回值conn就是null
                那麼我們就沒有必要讓程式繼續執行
                目的就是獲取連線操作資料庫,返回null是無法操作資料庫
                所以我們就可以把編譯異常轉換為執行時異常,讓程式停止下來
             */
            throw new RuntimeException("資料庫連線失敗..."+e);
        }
        return conn;
    }

    // 定義一個方法 , 用來釋放資源 .
    public static void close(ResultSet rs , Statement stmt , Connection conn){
        // 判斷它如果不為空 , 就釋放資源 . 
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使用JDBCUtils工具類: 查詢資料.

public class Demo03JDBC {
    
    // 使用JDBC技術 , 查詢資料.
    @Test
    public void testSelect(){
        // 使用JDBCUtil工具類 獲取資料庫連線物件Connection
        Connection conn = JDBCUtil.getConnection();
        // 獲取執行類物件Statement
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
            // 執行sql語句.獲取結果 .
            ResultSet rs = stmt.executeQuery("select * from users;");
            while (rs.next()){
                int i = rs.getInt("uid");
                String username = rs.getString( "username");
                String password = rs.getString("password");
                System.out.println(i+"\t"+username+" \t"+password);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }



}