{
if (stmt.positionalOnly) {
// no named params, is easy
boolean finished = false;
for (int i = 0; !finished; ++i) {
final Argument a = params.forPosition(i);
if (a != null) {
try {
a.apply(i + 1, statement, this.context);
}
catch (SQLException e) {
throw new UnableToExecuteStatementException(
String.format("Excpetion while binding positional param at (0 based) position %d",
i), e);
}
}
else {
finished = true;
}
}
}
else {
//List<String> named_params = stmt.params;
int i = 0;
for (String named_param : stmt.params) {
if ("*".equals(named_param)) continue;
Argument a = params.forName(named_param);
if (a == null) {
a = params.forPosition(i);
}
if (a == null) {
String msg = String.format("Unable to execute, no named parameter matches " +
"\"%s\" and no positional param for place %d (which is %d in " +
"the JDBC 'start at 1' scheme) has been set.",
named_param, i, i + 1);
throw new UnableToExecuteStatementException(msg);
}
try {
a.apply(i + 1, statement, this.context);
}
catch (SQLException e) {
throw new UnableToCreateStatementException(String.format("Exception while binding '%s'",
named_param), e);
}