public Object ExecNonQueryBatch(final BA ba, final String EventName) {
final ArrayList<Object[]> myList = nonQueryStatementsList;
nonQueryStatementsList = new ArrayList<Object[]>();
final SQL ret = SQL.cloneMe(this);
BA.submitRunnable(new Runnable() {
@Override
public void run() {
synchronized (connection) {
try {
BeginTransaction();
HashMap<String, PreparedStatement> cachedPS = new HashMap<String, PreparedStatement>();
try {
for (Object[] o: myList) {
String Statement = (String)o[0];
List Args = (List)o[1];
PreparedStatement ps = cachedPS.get(Statement);
if (ps == null) {
ps = connection.prepareStatement(Statement);
cachedPS.put(Statement, ps);
}
int numArgs = Args.IsInitialized() == false ? 0 : Args.getSize();
for (int i = 0; i < numArgs; i++) {
ps.setObject(i + 1, Args.Get(i));
}
ps.execute();
}
} finally {
for (PreparedStatement ps : cachedPS.values()) {
try {
ps.close();
} catch (Exception pse) {
pse.printStackTrace();
}
}
}
TransactionSuccessful();
ba.raiseEventFromDifferentThread(ret, null, 0, EventName.toLowerCase(BA.cul) + "_nonquerycomplete",
true, new Object[] {true});
} catch (Exception e) {
e.printStackTrace();
try {
Rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
ba.setLastException(e);
ba.raiseEventFromDifferentThread(ret, null, 0, EventName.toLowerCase(BA.cul) + "_nonquerycomplete",
true, new Object[] {false});
}
}
}
}, null, 0);
return ret;
}