org.kawanfw.sql.jdbc.util.ParametersUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.kawanfw.sql.jdbc.util.ParametersUtil.java

Source

/*
 * This file is part of AceQL. 
 * AceQL: Remote JDBC access over HTTP.                                     
 * Copyright (C) 2015,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                                
 *                                                                               
 * AceQL is free software; you can redistribute it and/or                 
 * modify it under the terms of the GNU Lesser General Public                    
 * License as published by the Free Software Foundation; either                  
 * version 2.1 of the License, or (at your option) any later version.            
 *                                                                               
 * AceQL is distributed in the hope that it will be useful,               
 * but WITHOUT ANY WARRANTY; without even the implied warranty of                
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             
 * Lesser General Public License for more details.                               
 *                                                                               
 * You should have received a copy of the GNU Lesser General Public              
 * License along with this library; if not, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.kawanfw.sql.jdbc.util;

import java.sql.SQLException;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.kawanfw.commons.util.Tag;
import org.kawanfw.sql.json.StatementHolder;

/**
 * 
 * Utilities for prepared statmeent parameters
 * 
 * @author Nicolas de Pomereu
 *
 */
public class ParametersUtil {

    /**
     * Check that the number of parameters is correct in the statement hold
     * 
     * @param statementHolder
     *            the statement holder
     * @throws SQLException
     *             if the number of parameters is incorrect, with a clean
     *             message
     */
    public static void checkParameters(StatementHolder statementHolder) throws SQLException {
        if (statementHolder == null) {
            throw new SQLException(Tag.PRODUCT_PRODUCT_FAIL + "statementHolder can not be null");
        }

        String sql = statementHolder.getSqlOrder();
        int parameterNumbers = StringUtils.countMatches(sql, "?");

        if (parameterNumbers == 0) {
            return;
        }

        Map<Integer, Integer> parameterTypes = statementHolder.getParameterTypes();
        Set<Integer> set = parameterTypes.keySet();

        if (set.size() > parameterNumbers) {
            // Nothing to do for this, already done in StatementHolder
        }

        for (int i = 1; i < parameterNumbers + 1; i++) {

            if (!set.contains(i)) {
                throw new SQLException("No value specified for parameter " + i);
            }
        }

    }

}