Ejemplo n.º 1
0
  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;
  }