JDBC(Java Database Connectivity,簡稱JDBC)---客戶端程序如何來訪問數據庫

JDBC(Java Database Connectivity,簡稱JDBC)—客戶端程序如何來訪問數據庫

前言:

主流架構:

1、BS架構(Browser and Server) 瀏覽器服務器架構—>web、javaweb、phpweb

2、CS架構(Client and Server) 客戶端服務器架構 —>QQ、微信

簡言之就是用java程序去訪問數據庫

正文:

JDBC的連接步驟:

加載驅動—>建立連接—>執行語句—>得到結果集

1、加載驅動

加載驅動,首先是先把驅動jar包導入

 <!--mysql驅動-->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>

編寫測試用例;

 //初始化驅動
    public void init(){
        try {
            //加載mysql驅動
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立連接  參數解釋:第一個參數是數據庫鏈接地址(不同數據庫會有不同的連接地址,由數據庫廠商提供),第二個參數是用戶名,第三個參數是密碼
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true", "root", "123");
            //獲取數據庫預處理對象preparedStatement  並編寫sql語句
            PreparedStatement preparedStatement = conn.prepareStatement("select * from user");
            //執行查詢語句
            ResultSet resultSet = preparedStatement.executeQuery();
            //循環讀取查詢結果集(因爲查詢的結果可能不止一條)
            while(resultSet.next()){
                //打印查詢出來的第一個字段
                System.out.println(resultSet.getString(1));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    //編寫主函數測試
    public static void main(String[] args) {
        new MyJdbc().init();
    }

要知道,我們每訪問一次數據庫,其實都是與數據庫建立了一次會話,建立會話之後,你所有的增刪改查,都是在本次會話中進行的,假如說,會話終止,或者在建立會話的時候建立失敗,那麼你所有的增刪改查的動作都無效

需要注意的是,如果你執行的是查詢語句,纔會有結果集,如果是增加更新刪除,只會有執行的條數,返回類型是型

優化:

再看看以上代碼,其實有很大一部分咱們沒有考慮到,所以他現在是爛代碼,怎麼把它變成好代碼,降低耦合。

所謂降低耦合就是降低程序之間的依賴關係,比如修改數據庫參數的時候,咱們不用改動源碼,直接在配置文件上面修改就可以運行(因爲改了源碼的話,還需要重新編譯,編譯之後的文件是.class的字節碼文件,不能直接修改參數,所以我們需要藉助配置文件的幫助)

配置文件:

java中配置文件主流的分兩種,一種是properties,一種是xml,這裏我使用的是properties。

編寫一個db.properties,存放到咱們的resource資源文件夾根目錄下(裏面一定不要爲了格式而多大空格,空格會算入內容,以鍵值對的形式編寫)

#降低程序代碼間的依賴關係,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123

接下來就是讀取配置文件讓咱們的代碼依賴減少:

  //讀取配置文件
            Properties properties = new Properties();
            properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );

這樣幾遍改動數據庫密碼賬號,我都不需要改動源碼文件,只需要修改配置文件就可以了。

注意事項:

在一次會話結束之後,一定要注意,打開的資源要關閉,咱們jvm的內存和mysql的連接數是有限的,不能把資源一直開着,執行結束以後就關閉資源,養成良好的代碼風格

源碼展示:

MyJdbc.java

package cn.tfs.jdbc;


import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class MyJdbc {
    private Connection conn;
    private PreparedStatement preparedStatement;
    private ResultSet resultSet;
    //初始化驅動
    public void init(){
        try {
            //加載mysql驅動
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立連接  參數解釋:第一個參數是數據庫鏈接地址(不同數據庫會有不同的連接地址,由數據庫廠商提供),第二個參數是用戶名,第三個參數是密碼
            //讀取配置文件
            Properties properties = new Properties();
            properties.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            conn = DriverManager.getConnection(properties.getProperty("jdbc.url"),properties.getProperty("jdbc.username") ,properties.getProperty("jdbc.password") );
            //獲取數據庫預處理對象preparedStatement  並編寫sql語句
            preparedStatement = conn.prepareStatement("select * from user");
            //執行查詢語句並將查詢結果拿給結果集
            resultSet = preparedStatement.executeQuery();
            //循環讀取查詢結果集(因爲查詢的結果可能不止一條)
            while(resultSet.next()){
                //打印查詢出來的第一個字段
                System.out.print(resultSet.getString("id")+"\t");
                System.out.print(resultSet.getString("name")+"\t");
                System.out.print(resultSet.getString("age")+"\t");
                System.out.println();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //釋放資源 關閉連接  (必要的)
            try {
                resultSet.close();
                preparedStatement.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

    public String query(){
        return "";
    }
    public int delete(){
        return 0;
    }
    public int upDate(){
        return 0;
    }
    public int add(){
        return 0;
    }

    //編寫主函數測試
    public static void main(String[] args) {
        new MyJdbc().init();
    }
}

db.properties

#降低程序代碼間的依賴關係,使用配置文件
jdbc.url=jdbc:mysql://localhost:3306/zjh?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123

需要幫助的同學歡迎留言或者聯繫郵箱:[email protected]

1580540814070

發佈了12 篇原創文章 · 獲贊 13 · 訪問量 3514
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章