private PreparedStatement buildPreparedStatement(boolean allowArrayParameters) { // array parameter handling parsedQuery = ArrayParameters.updateQueryAndParametersIndexes( parsedQuery, paramNameToIdxMap, parameters, allowArrayParameters); // prepare statement creation if (preparedStatement == null) { try { if (columnNames != null && columnNames.length > 0) { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery, columnNames); } else if (returnGeneratedKeys) { preparedStatement = connection .getJdbcConnection() .prepareStatement(parsedQuery, Statement.RETURN_GENERATED_KEYS); } else { preparedStatement = connection.getJdbcConnection().prepareStatement(parsedQuery); } } catch (SQLException ex) { throw new Sql2oException( String.format("Error preparing statement - %s", ex.getMessage()), ex); } connection.registerStatement(preparedStatement); } // parameters assignation to query for (Map.Entry<String, ParameterSetter> parameter : parameters.entrySet()) { for (int paramIdx : paramNameToIdxMap.get(parameter.getKey())) { try { parameter.getValue().setParameter(paramIdx, preparedStatement); } catch (SQLException e) { throw new RuntimeException( String.format("Error adding parameter '%s' - %s", parameter.getKey(), e.getMessage()), e); } } } // the parameters need to be cleared, so in case of batch, only new parameters will be added parameters.clear(); return preparedStatement; }