1. 程式人生 > 實用技巧 >資料庫的連線-JDBC-資料的增、刪、改、查

資料庫的連線-JDBC-資料的增、刪、改、查

一、JDBC概述

1、定義

JDBC(Java DataBase Connectivity) Java 連線資料庫技術。 Java語言訪問各個資料庫的一套介面集合。可以連線 MySql Oracle、DB2 等

2、 結構

​ 不同的資料庫 需要提供不同的資料庫連線驅動 , 該驅動由資料庫廠商提供,在連線之前匯入。

3、JDBC核心介面

JDBC連線程式中,sun提供核心介面 ,存在java.sql.* 和javax.sql.* 中

java.sql.* : 主要功能對資料庫基本程式設計操作,完成資料庫連線、執行sql語句,獲取結果等

javax.sql.* : 對資料庫的擴充套件操作 事務管理,行集合處理(RowSet)

核心介面:

  • java.sql.Connection : 表示資料庫連線物件,獲取資料庫連線資訊,使用者名稱,資料庫版本等,建立於資料庫的連線會話。
  • java.sql.Driver : 表示驅動類,需要在連線之前 載入該驅動類,繫結連線資料庫
  • java.sql.DriverManager : 這是一個類, 用於管理驅動的類,可從中獲取連線物件。
  • java.sql.Statement : sql執行介面, 主要用於執行sql語句(insert ,delete等) ,excute(sql語句)
  • java.sql.PreparedStatement : 它屬於Statement的子介面, 也用於執行sql語句,預編譯的sql語句 ,可防止sql注入異常
  • java.sql.ResultSet : 表示一個結果集類,用於返回sql語句查詢的結果。

4、Java連線資料庫的步驟

​ 1、匯入資料庫連線Jar包

​ 對於Mysql分不同版本 匯入的jar包不一樣

​ 以8.0為例 :

​ 2、載入啟動類

    3、獲取連線物件Connection

 4、獲取sql執行器 Statement

  5、執行sql語句 

  6、關閉連線
  // 1、匯入jar包, 一個專案(模組)只需要匯入一次   add to libs

        // 2、載入驅動類
        Class.forName("com.mysql.cj.jdbc.Driver"); // 通過反射執行該類
        // 3、通過驅動管理類獲取連線物件    引數語法   ?引數名=引數值&引數名=引數值
        String url="jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC";
        String username="root";
        String password ="123456"; // 這是你自己設定的root密碼
        Connection conn = DriverManager.getConnection(url,username,password);
        System.out.println("連線物件:"+conn);

        // **********************新增資料**************************
        //4、獲取sql執行器 Statement
        String sql="insert into  dept values( 50,'市場部','武漢')";
        Statement st =  conn.createStatement();
        // 5、執行SQL語句
        int count = st.executeUpdate(sql);
        if(count>0){
            System.out.println("新增成功");
        }else{
            System.out.println("新增失敗");
        }
        //6、關閉連線
        st.close();
        conn.close();

// 刪除資料

 /**
     * 刪除部門
     */
    public static void deleteDept(int deptno){

        try {
            //載入驅動
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 獲取資料庫連線
            //jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC&user=root&password=123456
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC","root","123456");
            //獲取sql執行器
            Statement st = conn.createStatement();
            //執行sql語句  executeUpdate
           int count = st.executeUpdate("delete from dept where deptno =" +deptno);
           //count 表示影響的行數
            if(count>0){
                System.out.println("刪除成功");
            }else{
                System.out.println("刪除失敗");
            }
            //關閉連線
            st.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

//修改資料

 /**
     * 修改部門   execute : 執行任意sql語句 (包括DDL  DML)
     */
    public static void updateDept(int deptno ,String loc){
        Connection conn = null;
        Statement st = null;

        //獲取資料庫連線
        String url= "jdbc:mysql://127.0.0.1:3306/j2008_db?useSSL=false&serverTimezone=UTC";
        try {
            //載入驅動
            Class.forName("com.mysql.cj.jdbc.Driver");
           conn  = DriverManager.getConnection(url,"root","123456");
           st = conn.createStatement();
           // 執行任意sql語句   返回boolean ,對於select語句返回true 非select返回false
           boolean flag = st.execute("update dept set loc = '"+loc+"' where  deptno = " + deptno);
            System.out.println("操作成功");

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally{
            // 關閉連線
             if(st!=null){
                 try {
                     st.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
             if(conn!=null){
                 try {
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
        }

    }

注意: executeUpdate 和 execute、executeQuery的區別

1、executeUpdate() 用於執行insert update ,delete 語句,返回sql影響的行數

​ execute() : 用於執行任意sql語句,包括 建立表, 新增約束等 ,返回boolean型別, 對於select語句返回true ,對於其他語句返回 false

​ executeQuery() : 用於執行查詢sql語句, 它會返回一個 結果集物件 ResultSet ,獲取結果集資料。