sql >> データベース >  >> RDS >> Mysql

プリペアドステートメントを動的に作成する方法-そしてクエリを再利用する

    すでにSQL文字列を動的に作成できると仮定します(?を挿入します) 必要に応じて正しい位置に)、Mapを使用することをお勧めします keyのパラメータを渡す パラメータの順序(1、2、3など)になります。このようなもの:

    public class Database{
        private String _sqlString;
        private Map<Integer,Object> _parameters;
    
        public Database(String sql){
            _sqlstring = sql;
        }
    
        public void setParameters(Map<Integer,Object> param){
            _parameters = param;
        }
    
        /* 
         * I'm assuming you already have a method like this
         */
        public List processQuery(){
            List results = new ArrayList();
            /* 
             * establish connection here
             */
            PreparedStatement preparedStatement = connection.prepareStatement(this._sqlString);
    
            if(_parameters != null){
                /* 
                 * Iterate over the map to set parameters 
                 */
                for(Integer key : _parameters.keySet()){
                    preparedStatement.setObject(key, _parameters.get(key));
                }
            }            
    
            ResultSet rs = preparedStatement.executeQuery();
            /*
             * process the ResultSet
             */
            return results;
        }
    
    }
    

    最後に、Databaseを使用できます 次のように:

    String sql = "SELECT FULLNAMES FROM CUSTOMER WHERE ADDRESS = ? OR ADDRESS = ?";
    
    Map<Integer,Object> param = new HashMap<>();
    param.put(1,"NEW YORK");
    param.put(2,"CHICAGO");
    
    Database db = new Database(sql);
    db.setParameters(param);
    List customers = db.processQuery();
    



    1. PHP:php.iniファイルがありません

    2. 初心者のためのSQLSELECT

    3. SQLiteQueryBuilderのselectionArgsは、列の整数値では機能しません

    4. ClusterControlCLIからPostgreSQLデータベースを管理する方法