public PreparedBatch add(Object... args) { PreparedBatchPart part = add(); for (int i = 0; i < args.length; ++i) { part.bind(i, args[i]); } return this; }
/** * 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(); } } }
/** * 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; }