JDBC連接-----更靈活的編寫方式(配置文件編寫)

JDBC連接-----更靈活的編寫方式(配置文件編寫)

目錄

1、爲什麼要用配置文件寫JDBC連接?

2、關於Properties類

3、讀取配置文件

4、加載驅動的工具類代碼實現

總結


1、爲什麼要用配置文件寫JDBC連接?

爲了使原生的JDBC連接更靈活。

開發中獲得連接的4個參數(驅動、URL、用戶名、密碼)都存在配置文件中,這樣方便後期維護,程序如果需要更換數據庫,只需要修改配置文件即可。

2、關於Properties類

讀取配置文件的信息用到的是Java提供的一個專用的類Properties 。這個類繼承自Hashtable,是個雙列集合。他有個load(InputStream) 方法,用來加載輸入流讀取的文件,會將文件中以“A=B”方式存儲的信息讀取進來分別將A值和B值放進Properties集合的key、和value中。這樣一來,如果將開發中獲得連接的4個參數(驅動、URL、用戶名、密碼)都存在項目下的一個文本文件中,通過Properties加載進來,就大大提高了代碼的靈活性,程序如果需要更換數據庫,只需要修改這個文件即可。

這個文件就是置文件。配置文件都默認放在當前項目的src目錄下。因爲我們是用Properties加載的,所以把配置文件的後綴定爲(.properties),命名爲config.properties.關於後綴名,後綴不影響文本文件的內容,影響的是打開文件的方式。

如下(2-1)config.properties存儲的內容

3、讀取配置文件

讀取配置文件有兩種方法,一種是根據路徑讀取文件;另一種是通過類加載器來獲取指定流文件的信息。後者不需要寫路徑,只要在項目內部,源碼會自動尋找,但需要對類加載器有一定理解(不理解的話,記着固定格式直接拿來用也行)。

讀取配置文件的代碼寫在名爲JdbcSuperPlus的工具類中,所以使用第二種方法讀取配置文件的寫法應該是(3-1)

InputStream ras = JdbcSuperPlus.class.getClassLoader().getResourceAsStream("config.properties");
返回的是一個輸入流,將輸入流直接傳入Properties對象的load方法中,然後通過Properties的getProperty方法獲取4個參數。代碼如下(3-2)。
    public static void init() throws IOException {
        //定義Properties容器對象
        Properties pp = new Properties();
        //類加載器的方式獲取配置文件信息
        InputStream ras = JdbcSuperPlus.class.getClassLoader().getResourceAsStream("config.properties");
        //測試
        /*System.out.println(ras);*/
//通過流文件根據路徑獲取配置文件信息
        /*pp.load(new FileInputStream("tes_jdbc\\src\\config.properties"));*/
        //將讀取到的配置文件信息加載到Properties集合中
        pp.load(ras);
        //分別獲取4個參數
        className = pp.getProperty("className");
        url = pp.getProperty("url");
        username = pp.getProperty("username");
        password = pp.getProperty("password");

    }

我們可以看到這個獲取參數的方法自成一體,叫init,init取的是Initialization的前四個字母,意爲初始化,初始化的步驟單獨寫在一個方法而不是放在靜態代碼塊中,目的是爲了降低靜態代碼塊的臃腫性,在靜態代碼塊中加載驅動,同時調用init方法,進行初始化值。代碼顯得不那麼臃腫。

4、加載驅動的工具類代碼實現

4個關鍵參數已經獲取,那麼加載驅動分、獲取連接、關閉資源這些放在工具類中的代碼就很容易完成了。代碼如下(4-1)

package test01;

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

/**
 * @Author: ${user}
 */
public class JdbcSuperPlus {
    private static String url;
    private static String username;
    private static String password;
    private static String className;

    static {
        try {
            init();
            Class.forName(className);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void init() throws IOException {
        //定義Properties容器對象
        Properties pp = new Properties();
        //類加載器的方式獲取配置文件信息
        InputStream ras = JdbcSuperPlus.class.getClassLoader().getResourceAsStream("config.properties");
        //測試
        /*System.out.println(ras);*/
//通過流文件根據路徑獲取配置文件信息
        /*pp.load(new FileInputStream("tes_jdbc\\src\\config.properties"));*/
        //將讀取到的配置文件信息加載到Properties集合中
        pp.load(ras);
        //分別獲取4個參數
        className = pp.getProperty("className");
        url = pp.getProperty("url");
        username = pp.getProperty("username");
        password = pp.getProperty("password");

    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);

    }

    //關閉資源
    public static void close(Connection con, Statement stat, ResultSet rs) {
        try {
            if (con != null)
                con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stat != null)
                stat.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5、定義一個test類Test_jsp,獲取連接執行sql語句。代碼如下(5-1)

package test01;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @Author: ${user}
 */
public class Test_jsp {

    public static void main(String[] args) throws SQLException {
        //加載獲取連接
        Connection conn = JdbcSuperPlus.getConnection();
        String str = "select * from book";
        //獲取執行sql的對象
        PreparedStatement ps = conn.prepareStatement(str);
        //執行查詢功能
        ResultSet rs = ps.executeQuery();
        //處理結果集
        while(rs.next()){
            System.out.print(rs.getInt(1));
            System.out.print(rs.getString(2));
            System.out.print(rs.getDouble(3));
            System.out.println(rs.getString(4));
        }
        //關閉資源
        JdbcPlus.close(conn,ps,rs);

    }
}

定義的測試類和原生jdbc連接的測設了一模一樣!

 

總結

Jdbc使用配置文件連接寫的時候還是想着前面原生Jdbc連接來寫的,所以很多解釋都在前面Jdbc原生連接的博文中,在這裏附上前文連接,以便跳轉。

能力尚淺,有待進步,如有不足,不吝賜教!

模塊管理 QQ客服 JDBC連接——原始連接(mysql)(創建工具類的方式加載驅動)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章