1. 程式人生 > >jdbc基礎 (二) 通過properties配置檔案連線資料庫

jdbc基礎 (二) 通過properties配置檔案連線資料庫

上一篇描述了對mysql資料庫的簡單操作,下面來看一下開發中應該如何靈活應用。

因為jdbc對資料庫的驅動載入、連接獲取、釋放資源的程式碼都是相同的,為了提高程式碼的複用性,我們可以寫一個工具類,將資料庫驅動載入、獲取連線、資源釋放的程式碼封裝起來。同時,為了提高工具類的靈活性,可以將資料庫的驅動、url、使用者名稱、密碼等資訊以鍵值對的形式存放在properties檔案中,工具類初始化時從配置檔案中讀取所要連線資料庫的資訊。當需要更改連線的資料庫時,只需要更改配置檔案即可,而不必改寫工具類的程式碼。

下面是工具類程式碼的實現:

package com.cream.ice.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {

    private static String driverName;
    private static String url;
    private static String user;
    private static String password;

    /*
     * 靜態程式碼塊,類初始化時載入資料庫驅動
     */
    static {
        try {
            // 載入dbinfo.properties配置檔案
            InputStream in = JdbcUtils.class.getClassLoader()
                    .getResourceAsStream("dbinfo.properties");
            Properties properties = new Properties();
            properties.load(in);

            // 獲取驅動名稱、url、使用者名稱以及密碼
            driverName = properties.getProperty("driverName");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");

            // 載入驅動
            Class.forName(driverName);
            
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /*
     * 獲取連線
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);

    }

    /*
     * 釋放資源
     */
    public static void releaseResources(ResultSet resultSet,
            Statement statement, Connection connection) {

        try {
            if (resultSet != null)
                resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            resultSet = null;
            try {
                if (statement != null)
                    statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                statement = null;
                try {
                    if (connection != null)
                        connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    connection = null;
                }
            }
        }

    }

}

這裡dbinfo.properties檔案中資訊如下,讀者可自行更改:
driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
user=root
password=01050233

這裡我們來舉個例子使用工具類。我們寫一個類JdbcCURD實現對特定資料庫的增刪改查操作,並在main函式中使用。

JdbcCURD.java程式碼如下:

package com.cream.ice.jdbc;

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

public class JdbcCURD {

    private Connection connection;
    private Statement statement;
    private ResultSet resultSet;

    //更新操作
    public void update(String sql) {
        try {
            connection = JdbcUtils.getConnection();
            statement = connection.createStatement();
            //可執行建立、修改、刪除表,新增、刪除、修改元組以及查詢sql語句
            statement.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseResources(resultSet, statement, connection);
        }
    }
    
    //查詢操作
    public void Query(String sql) {
        try {
            connection = JdbcUtils.getConnection();
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);
            
            while(resultSet.next()){
                System.out.println("name:"+resultSet.getString("name"));
                System.out.println("id:"+resultSet.getString("Tid"));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseResources(resultSet, statement, connection);
        }
    }
    
    //新增操作
    public void addElement(String sql) {
        update(sql);
    }
    
    //刪除操作
    public void removeElement(String sql) {
        update(sql);
    }

    //建立一個表
    public void createTable(String sql){
        update(sql);
    }
    
    //刪除一個表
    public void dropTable(String sql){
        update(sql);
    }

}

我們來寫一個main函式來測試:
package com.cream.ice.jdbc;

import java.sql.SQLException;

public class JdbcTest {
    
    public static void main(String[] args) throws ClassNotFoundException,
            SQLException {
        
        JdbcCURD curd=new JdbcCURD();

        String sql = null;
        
        //新增表Teacher
        sql="create table Teacher (Tid char(9) primary key,name char(9) unique)";
        curd.createTable(sql);
        
        //新增元組
        sql = "insert into Teacher (Tid,name) values ('0001','Tom')";
        curd.addElement(sql);
        
        //查詢Teacher表
        sql="select * from Teacher";
        curd.Query(sql);
        
        //刪除元組
        sql="delete from Teacher where Tid='0001'";
        curd.removeElement(sql);
        
        //刪除表Teacher
        sql="drop table Teacher";
        curd.dropTable(sql);
    }

}

經測試,將在控制檯輸出下列資訊:
name:Tom
id:0001

與上一篇中對資料庫的操作相比,從配置檔案中讀取要連線資料庫的資訊,大大提高了程式碼的複用性以及靈活性,省去了當更改資料庫時還要更改程式碼的麻煩。