JDBC中級實現--數據庫連接四要素的抽取與動態獲取

1.數據庫連接四要素不應該寫死在代碼中,擴展性不高,應該抽取到配置文件中動態讀取:

擴展文件名.properties

DRIVER_CLASS_NAME = com.mysql.jdbc.Driver
URL = jdbc:mysql:///mysql_jdbc
USER = root
PASSWORD = root

2.動態讀取操作,只需要執行一次,所以解析代碼寫在靜態代碼塊

  Class.forName(),註冊也只需要執行一次,所以也放在靜態代碼塊

static {
        try {
            Properties properties = new Properties();
            properties.load(new FileInputStream("jdbc.properties"));
            DRIVER_CLASS_NAME = properties.getProperty("DRIVER_CLASS_NAME");
            URL = properties.getProperty("URL");
            USER  = properties.getProperty("USER");
            PASSWORD = properties.getProperty("PASSWORD");
//            System.out.println(DRIVER_CLASS_NAME+"-"+URL+"-"+USER+"-"+PASSWORD);
            Class.forName(DRIVER_CLASS_NAME);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3.爲數據庫的連接專門寫個工具類用於獲取連接和釋放資源,以及公共代碼


/*
    工具類封裝步驟:
        1.jdbc中每次都要寫註冊獲取連接和資源釋放
        2.參數數據,不應該直接寫在代碼中,直接抽取到最上面,便於後期開發維護
        3.數據庫連接四要素,不應該寫死在代碼中,擴展性不高,應該抽取到配置文件中動態讀取
        4.動態讀取操作,只需要執行一次,所以解析代碼寫在靜態代碼塊
        5.class.forName(),註冊也只需要執行一次,所以也放在靜態代碼塊
 */
public class JdbcUtil {

    public static  String DRIVER_CLASS_NAME ;
    public static  String URL ;
    public static  String USER ;
    public static  String PASSWORD ;

    //如果要保證一部分代碼僅僅動態讀取一次,則使用靜態代碼塊
    static {
        try {
            Properties properties = new Properties();
            properties.load(new FileInputStream("jdbc.properties"));

             DRIVER_CLASS_NAME = properties.getProperty("DRIVER_CLASS_NAME");
             URL = properties.getProperty("URL");
             USER  = properties.getProperty("USER");
             PASSWORD = properties.getProperty("PASSWORD");
//            System.out.println(DRIVER_CLASS_NAME+"-"+URL+"-"+USER+"-"+PASSWORD);
            Class.forName(DRIVER_CLASS_NAME);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    //獲取連接
    public static Connection getConnection()  {
        Connection connection = null;
        try {
            //ctrl+Alt+C抽取
            connection = DriverManager.getConnection(URL, USER,PASSWORD);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }


    //資源釋放
    public static  void release(ResultSet resultSet, Statement statement,Connection connection){
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            resultSet = null;//避免內存泄漏
        }

        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            statement = null;//避免內存泄漏
        }

        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            connection = null;//避免內存泄漏
        }
    }
}

4.用戶登錄實例

package Login_01;

import java.sql.*;
import java.util.Scanner;

public class LoginDemo {
    public static void main(String[] args) throws SQLException {
        //提醒用戶輸入用戶名
        System.out.println("請輸入用戶名:");
        Scanner scanner = new Scanner(System.in);
        String username = scanner.nextLine();

        System.out.println("請輸入登錄密碼:");
        Scanner scanner1 = new Scanner(System.in);
        String password = scanner1.nextLine();
        //提醒用戶輸入密碼


        Connection connection = JdbcUtil.getConnection();
        Statement statement = connection.createStatement();

        String sql = "SELECT count(*) FROM USER WHERE username = '"+username+"' AND password = '+password+' ;";
        ResultSet resultSet = statement.executeQuery(sql);
       
        int count = 0;
        while (resultSet.next()) {
            count = resultSet.getInt("count(*)");
        }
        System.out.println(count >0 ? "登錄成功" :" 登錄失敗");
        JdbcUtil.release(resultSet,statement,connection);
    }
}

簡單測試DemoTest: 

import util.JDBCUtils;

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

public class JdbcUtilTest {
    public static void main(String[] args) throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        Statement statement = connection.createStatement();
        String sql = "Update user set password = '54321'";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        JDBCUtils.release(null,statement,connection);
    }
}

 

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