Beispiel #1
0
 public PreparedBatch add(Object... args) {
   PreparedBatchPart part = add();
   for (int i = 0; i < args.length; ++i) {
     part.bind(i, args[i]);
   }
   return this;
 }
Beispiel #2
0
  /**
   * Execute the batch
   *
   * @return the number of rows modified or inserted per batch part.
   */
  public int[] execute() {
    // short circuit empty batch
    if (parts.size() == 0) {
      return new int[] {};
    }

    PreparedBatchPart current = parts.get(0);
    final String my_sql;
    try {
      my_sql = getStatementLocator().locate(getSql(), getContext());
    } catch (Exception e) {
      throw new UnableToCreateStatementException(
          String.format("Exception while locating statement for [%s]", getSql()), e, getContext());
    }
    final RewrittenStatement rewritten =
        getRewriter().rewrite(my_sql, current.getParameters(), getContext());
    PreparedStatement stmt = null;
    try {
      try {
        stmt = getHandle().getConnection().prepareStatement(rewritten.getSql());
        addCleanable(Cleanables.forStatement(stmt));
      } catch (SQLException e) {
        throw new UnableToCreateStatementException(e, getContext());
      }

      try {
        for (PreparedBatchPart part : parts) {
          rewritten.bind(part.getParameters(), stmt);
          stmt.addBatch();
        }
      } catch (SQLException e) {
        throw new UnableToExecuteStatementException(
            "Exception while binding parameters", e, getContext());
      }

      beforeExecution(stmt);

      try {
        final long start = System.nanoTime();
        final int[] rs = stmt.executeBatch();
        final long elapsedTime = System.nanoTime() - start;
        getLog().logPreparedBatch(elapsedTime / 1000000L, rewritten.getSql(), parts.size());
        getTimingCollector().collect(elapsedTime, getContext());

        afterExecution(stmt);

        return rs;
      } catch (SQLException e) {
        throw new UnableToExecuteStatementException(e, getContext());
      }
    } finally {
      try {
        cleanup();
      } finally {
        this.parts.clear();
      }
    }
  }
Beispiel #3
0
 /**
  * Create a new batch part by binding values looked up in <code>args</code> to named parameters on
  * the statement.
  *
  * @param args map to bind arguments from for named parameters on the statement
  * @return the new batch part
  */
 public PreparedBatchPart add(Map<String, ? extends Object> args) {
   PreparedBatchPart part = add();
   part.bindFromMap(args);
   return part;
 }