天天看點

JDBC 操作資料庫JDBC簡介:JDBC架構:JDBC操作資料庫執行個體:

JDBC簡介:

JDBC(Java DataBase Connectivity)是一種用于執行SQL語句的Java API,可以為多種關系資料庫提供統一的通路,它由一組用Java語言編寫的類和接口組成。使用JDBC通路資料庫的基本步驟如下:

  • 加載JDBC驅動程式
  • 建立資料庫連接配接
  • 建立操作資料庫SQL的對象
  • 執行語句并分析執行結果
  • 關閉連接配接

操作執行個體:

一、操作mysql資料庫

MySQL安裝方法

二、下載下傳驅動

要在程式中連接配接mysql資料庫對其進行操作,我們還需要下載下傳驅動Mysql-Connector/J,這是mysql為java的資料庫連接配接開發的庫,同時官網上也有類似為其他語言的庫,比如Connectors/.Net , Connectors/php , Connectors/C++,下載下傳驅動之後将驅動導入項目檔案。

點選下載下傳驅動

三、連接配接MySQL資料庫

  1. 定義連接配接資料庫的三個常量:URL、USERNAME、PASSWORD
  2. 定義資料庫的連接配接對象
  3. 資料庫連接配接(1、加載驅動 2、驅動管理得到資料庫的連接配接并傳回一個資料庫對象)
  4. 關閉資料庫連接配接
  5. main函數進行測試

代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DB_Helper {
    public static final String URL = "jdbc:mysql://localhost:3306/company?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";

    // 定義資料庫的連接配接對象
    public static Connection conn;
    // 資料庫連接配接對象
    public static Connection getConn(){
        try {
            // 加載驅動
            Class.forName("com.mysql.cj.jdbc.Driver");
            try {
                // 驅動管理得到資料庫的連接配接并傳回一個資料庫對象
                conn= DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return conn;
    }
    // 關閉資料庫連接配接
    public static void closeConn(Connection conn){
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(DB_Helper.getConn());
    }
}

           

結果如下:

JDBC 操作資料庫JDBC簡介:JDBC架構:JDBC操作資料庫執行個體:

JDBC架構:

JDBC API支援用于資料庫通路的兩層和三層處理模型,但通常,JDBC體系結構由兩層組成:

  • JDBC API:提供應用程式到JDBC管理器連接配接。
  • JDBC驅動程式API:支援JDBC管理器到驅動程式連接配接。

以下是架構圖,它顯示了驅動程式管理器相對于JDBC驅動程式和Java應用程式的位置:

JDBC 操作資料庫JDBC簡介:JDBC架構:JDBC操作資料庫執行個體:

JDBC操作資料庫執行個體:

一、在MySQL資料庫中建構一個表

JDBC 操作資料庫JDBC簡介:JDBC架構:JDBC操作資料庫執行個體:

二、編寫程式

  • 建立mysql_conn,存放DB_Helper類,用來連接配接資料庫
  • 建立entity包,存放Emp類,作為使用者的實體類
  • 建立dao包,存放Emp_dao接口,用來定義方法
  • 建立dao_impl包,存放接口的實作類Emp_impl
  • 創test包,存放Test測試類

一、DB_Helper類

詳細見上方mysql資料庫

二、Emp類

// 使用者的實體類

public class Emp {
    private int empno;
    private String ename;
    private String job;
    private String mgr;

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getMgr() {
        return mgr;
    }

    public void setMgr(String mgr) {
        this.mgr = mgr;
    }

    // 定義有參的構造方法
    public Emp(int empno, String ename, String job, String mgr) {
        super();
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
    }
    // 有參的構造方法(empon是自增,不用進行指派)
    public Emp(String ename, String job, String mgr) {
        super();
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
    }
    // 定義無參的構造方法

    public Emp() {
        super();
    }
}
           

三、Emp_dao 接口

public interface Emp_dao {
    // 查詢所有的使用者資訊,并傳回
    public List<Emp> findAllUser();

    // 查詢某個使用者的資訊并傳回
    public Emp findUserById(int id);
}
           

四、Emp_impl實作類

import dao.Emp_dao;
import entity.Emp;
import mysql_conn.DB_Helper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Emp_impl implements Emp_dao {
    // 定義查詢所有使用者資訊的實作類
    @Override
    public List<Emp> findAllUser() {
        List<Emp> lists = new ArrayList<Emp>();
        // 1、獲得資料庫的連接配接對象
        Connection conn = DB_Helper.getConn();
        // 2、書寫SQL語句操作資料表
        String sql = "select * from emp";
        // 3、預編譯SQL語句
        try {
            PreparedStatement pps = conn.prepareStatement(sql);
            // 4、執行查詢指令
            ResultSet resultSet = pps.executeQuery();
            // 5、循環讀取結果集中的資料
            while (resultSet.next()){   // 如果結果集中有資料傳回true
                // 6、 把結果集中的資料讀取出來指派給使用者的屬性
                Emp emp = new Emp();
                emp.setEmpno(resultSet.getInt(1));
                emp.setEname(resultSet.getString(2));
                emp.setJob(resultSet.getString(3));
                emp.setMgr(resultSet.getString(4));
                lists.add(emp);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return lists;
    }

    // 定義查詢某個使用者資訊的實作類
    @Override
    public Emp findUserById(int id) {
        Emp emp = null;
        // 1、獲得資料庫的連接配接對象
        Connection conn = DB_Helper.getConn();
        // 2、書寫SQL語句操作資料表
        String sql = "select * from emp WHERE empno=?";
        // 3、預編譯SQL語句
        try {
            PreparedStatement pps = conn.prepareStatement(sql);
            // 4、給SQL語句占位符指派
            pps.setInt(1,id);
            // 5、執行查詢指令
            ResultSet resultSet = pps.executeQuery();
            // 6、循環讀取結果集中的資料
            while (resultSet.next()){   // 如果結果集中有資料傳回true
                // 7、 把結果集中的資料讀取出來指派給使用者的屬性
                emp = new Emp();
                emp.setEmpno(resultSet.getInt(1));
                emp.setEname(resultSet.getString(2));
                emp.setJob(resultSet.getString(3));
                emp.setMgr(resultSet.getString(4));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return emp;
    }
}

           

五、Test測試類

public class Test {
    public static void main(String[] args) {
        // 查詢到所有的使用者
        Emp_impl eil = new Emp_impl();
        List<Emp> lists = eil.findAllUser();
        for (Emp emp : lists) {
            System.out.println(emp.getEmpno()+"\t"+emp.getEname()+"\t"+emp.getJob()+"\t"+emp.getMgr());
        }

        // 查詢到單個使用者
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入想要查詢的編号:");
        int number = scanner.nextInt();
        Emp user = eil.findUserById(number);
        if (user!=null){
            System.out.println(user.getEmpno() + "\t" + user.getEname() + "\t" + user.getJob() + "\t" + user.getMgr());
        }

    }
}

           

結果如下:

JDBC 操作資料庫JDBC簡介:JDBC架構:JDBC操作資料庫執行個體: