JDBC実戦チュートリアル(二)-JDBC構成とコードの最適化

6150 ワード

JDBC実戦チュートリアル-JDBC構成とコードの最適化
前のコードでは、jdbc構成情報(ユーザー名、パスワード、駆動情報、データベース・サービスに接続するURL)をメソッドに宣言し、次のように変数を割り当てます.
    public static void main(String[] args){
        String url = "jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false";
        String user = "root";
        String password = "root";
        Connection con = DriverManager.getConnection(url, user, password);
        String sql = "select * from company where name like ?";
       //  Statement  
        PreparedStatement st = con.prepareStatement(sql);
       //  SQL        
        ResultSet rs = st.executeQuery();
    }

実際には、データベースの接続構成情報をpropertiesファイルに完全に書き込んで、propertiesファイルを参照する方法を提供します.具体的には、次のようにします.
1.srcディレクトリの下にjdbcという名前を作成する.propertiesファイル、jdbc.propertiesファイルは接続データベースの作成に使用するデータベースドライバ、接続URLアドレス、ユーザー名、パスワード、以下の通りです.
    jdbc.driver = com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false
    user=root
    password=root

2、javaファイルでjdbcを参照する.propertiesファイル:
    //           
    public static String getProperties(String key){
        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream("jdbc.properties"));
            return prop.getProperty(key);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

3、ドライバをロードするこのステップでは、静的コードブロックに抽出して配置することができます.これにより、クラスがロードされたときにドライバをロードすることができます.ドライバドライバをロードするにはgetProperties()メソッドを使用します.以下のようにします.
   //       
   static {
       try {
             Class.forName(getProperties("jdbc.driver"));
       } catch (ClassNotFoundException e) {
             e.printStackTrace();
       }
   }

4、Connection接続操作を取得するには、次のような方法を抽出することもできます.
    //  Connection  
    public static Connection getConnection(){
        String url = getProperties("url");
        String user = getProperties("user");
        String password = getProperties("password");
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

5、Statementオブジェクトを作成し、SQL文を実行し、結果セットを以下のようにカプセル化する.
    //  Statement     SQL  
    public static ResultSet doStatement(String sql){
        Connection con = getConnection();
        try {
            Statement stmt = con.createStatement();
            return stmt.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    //  PreparedStatement   ,      
    public static ResultSet doPreparedStatement(String sql){
        Connection con = getConnection();
        try {
            PreparedStatement stmt = con.prepareStatement(sql);
            return stmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

6、接続を閉じる操作は以下の通りです.
    //      
    public static void close(Connection con, Statement st, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (st != null) {
                st.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

ソースコードは次のとおりです.
package com.zhq.jdbc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {

    public static void main(String[] args) {
        String sql = "select * from user";
        doStatement(sql);
    }

    static {
        try {
            Class.forName(getProperties("jdbc.driver"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        String url = getProperties("url");
        String user = getProperties("user");
        String password = getProperties("password");
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getProperties(String key) {
        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream("jdbc.properties"));
            return prop.getProperty(key);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static ResultSet doStatement(String sql) {
        Connection con = getConnection();
        try {
            Statement stmt = con.createStatement();
            return stmt.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static ResultSet doPreparedStatement(String sql) {
        Connection con = getConnection();
        try {
            PreparedStatement stmt = con.prepareStatement(sql);
            return stmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void close(Connection con, Statement st, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (st != null) {
                st.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}