jdbcのカプセル化(追加と削除)

DBHelper

パッケージcom.nll.dao; 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DBHelper {
//ロードドライバーは、通常、一度
    静的にのみロードします{
        try {
            //最初のステップドライバー
            //mysql5.0+バージョン( "com.mysql.cj.jdbc.Driver")バージョン8.0+( "com.mysql.cj.jdbc.Driver")
            Class.forName( "oracle.jdbc.OracleDriver")をロードします;
        } catch(ClassNotFoundException e){
            // TODO自動生成されたcatchブロック
            e.printStackTrace();
        }
    }
    
    public static Connection getConnection(){
        // 2番目のステップは接続を確立することです。これもカプセル化します。主にトラブルが発生するのに長すぎるのはなぜですか
        conn = null;
        try {
            // mysqlは "jdbc:mysql:// localhost:3306 / [データベース名]?に変更できますか?allowPublicKeyRetrieval = true&serverTimezone = UTC&useSSL = false&characterEncoding = UTF-8"
            conn = DriverManager.getConnection( "jdbc:oracle:thin:@ 127.0 .0.1:1521:orcl "、" scott "、" scott ");
        } catch(SQLException e){
            // TODO自動生成されたcatchブロック
            e.printStackTrace();
        }
        return conn;
    }
    私たちは、同じ機能のSQLステートメントは同じではありませんだけで準備されたステートメントのパラメータは内部のそれのではなくオブジェクトのSQL文SQL文を記述する//第3のステップはある
    我々がパラメータとしてSQL文に終わるので//
    
    
    // CRUDどちらも同じメソッドexecuteUpdateであり、戻り値は同じです
    //
    public int doUpdate(String sql、Object ... params)をカプセル化するときに一緒に追加、削除、変更します{
        //最初に接続を取得します
        Connection conn = getConnection();
        //戻り値を決定する
        int result = -1;
        try {
            //
            PreparedStatement オブジェクトPreparedStatement pstmt = conn.prepareStatement(sql);
            //パラメータについては、プレースホルダはありますか?
            //メンバーパラメータの追加、削除、
            
            変更だけでなく、クエリのパラメータもあるので、doParams(pstmt、params);をカプセル化します
            // SQLステートメントを実行します
            result = pstmt.executeUpdate();
            closeAll(null、conn、pstmt);
        } catch(SQLException e){
            // TODO自動生成されたcatchブロック
            e.printStackTrace();
        }
        
        return result;
        
    }
    public List <Map <String、String >> findAll(String sql、Object ... params){
        List < Map <String、String >> list = new ArrayList <Map <String、String >>();
        try {
        //最初に接続を取得する
        Connection conn = getConnection();
        ResultSet             resultset = null;
    
            //
PreparedStatement オブジェクトPreparedStatement pstmt = conn.prepareStatement(sql);
            //パラメータについてはどうですか、プレースホルダはありますか?
            //メンバーパラメータの追加、削除、
            
            変更だけでなく、クエリのパラメータもあるので、doParams(pstmt、params); もカプセル化します。
            resultset = pstmt.executeQuery();
            
            // Map のキーを取得する方法-"このsqlステートメントのフィールド
            //最初に、結果セットを通じてメタデータを取得する必要があります
            ResultSetMetaData rsmd = resultset.getMetaData();
            String [] columnNames = new String [rsmd .getColumnCount()];
            for(int i = 0; i <columnNames.length; i ++){
                //ここで取得するキーはすべて大文字なので、小文字の
                columnNames [i] = rsmd.getColumnName( i + 1).toLowerCase();
                
            }
            while(resultset.next()){
                Map <String、String> map = new HashMap <String、String>();
                //列名に従って
                、(String cn: columnNames){
                    文字列値= resultset.getString(cn);
                    map.put(cn、value);
                }
                //当一条取完放到list里面去
                list.add(map);
            }
            closeAll(resultset、conn、pstmt);
            
        } catch(SQLException e){
            // TODO自動生成されたcatchブロック
            e.printStackTrace();
        }
        リストを返します。
        
        
    
        
    }
    private void closeAll(ResultSet rs、Connection conn、PreparedStatement pstmt){
        // TODO自動生成されたメソッドスタブ
        
            try {
                if(rs!= null){
                rs.close();
                }
                if(conn!= null){
                    conn.close();
                }
                if(pstmt!= null){
                    pstmt.close();
                }
            } catch(SQLException e){
                // TODO自動生成されたcatchブロック
                e.printStackTrace();
            }
        }
    private void doParams(PreparedStatement pstmt、Object ... params){
        //最初にユーザーがパラメーターを渡していないかどうかを確認し、次にパラメーターを挿入する必要はありません
        if(params!= null && params.length> 0){
            //私たちはパラメーターObject ...量指定子パラメーターのみを注入します、本質的には
            (int i = 0; i <params.length; i ++)の配列{
                //すべてがオブジェクトです
                try {
                    pstmt.setObject(i + 1、params [i]);
                } catch(SQLException e){
                    // TODO自動生成されたcatchブロック
                    e.printStackTrace();
                }
            }
            
        }
        
        
    }
    
}

Test.java

パッケージcom.nll.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

パブリック クラスTest1 {

    public  static  void main(String [] args){
         // TODO自動生成されたメソッドスタブ
         // jdbcのカプセル化をテスト
         // 静的メソッドではないため、最初に 
        インスタンス化DBHelper db = new DBHelper();
 //         // sqlを書き込みパラメータのないステートメント
 //         文字列sql1 = "update autoincre_demo set id = id + 1";
 //         int result1 = db.doUpdate(sql1);
 //         if(result1> 0){
 //             System.out.println( "正常に変更されました ");
 //         } else {
 //             System.out.println(" Modified failed ");
 //         }
 //         //sqlステートメントを書き込む(パラメーター付き)
 //         String sql = "update autoincre_demo set NAME =?";
 //         // 実行
 //         int result = db.doUpdate(sql、 "Haikou");
 //         if(result> 0 ){
 //             System.out.println( "Modified successful");
 //         } else {
 //             System.out.println( "Modified failed");
 //         }
         // クエリ操作 
      文字列sql2 = "select * from autoincre_demo " ;
       リスト <Map <String、String >> list = db.findAll(sql2);
       forint i = 0; i <list.size(); i ++ ){
        System.out.println(list.get(i).get( "name" ));
    }

       
    }

}

 

おすすめ

転載: www.cnblogs.com/ll-hb/p/12727651.html