[ http://issues.apache.org/jira/browse/IBATIS-261?page=all ] Sven Boden closed IBATIS-261: -----------------------------
Fix Version: 2.2.0 Resolution: Invalid Assign To: Sven Boden This is not a bug in iBATIS, so I'm closing the JIRA. I would suggest to use the dev mailing list for further discussion... if required. I made small testcase with Oracle to simulate the problem, the easiest for you would be to put a breakpoint on the method executeBatch() in SqlExecutor and step through that method (and also going into batch.executeBatch()). What you will detect in there is that the updates/inserts get executed properly but the return array of ints of executeBatch will contain all -2's, which get translated to 0 and added up... so you will always get 0 back upon successful execution. The reason is Oracle (not the JDBC drivers, Oracle). From the Oracle manuals: "For a prepared statement batch, it is not possible to know the number of rows affected in the database by each individual statement in the batch. Therefore, all array elements have a value of -2. According to the JDBC 2.0 specification, a value of -2 indicates that the operation was successful but the number of rows affected is unknown.", hence your problem with the row count. Oracle has decided not to support the row count in a batch for PreparedStatements. iBATIS uses PreparedStatements, even if you use all $$ notation (PreparedStatement without parameters) and that's why you get a 0 row count. The JDBC spec leaves it open, Oracle took the easy way out in this case, HSQL implemented it. Just on a side note: - Oracle also does not support batch processing for non-PreparedStatements (you can put them in a batch, but they are sent 1 by 1 to the database server without batching). - You do need PreparedStatements with properly binded arguments for Oracle unless you want to experience severe performance and scalability problems. Sven > CLONE -The method executor.executeBatch() always returns 0. > ----------------------------------------------------------- > > Key: IBATIS-261 > URL: http://issues.apache.org/jira/browse/IBATIS-261 > Project: iBatis for Java > Type: Bug > Components: SQL Maps > Versions: 2.1.0 > Environment: SUN JVM 1.4.2 On Windows > Reporter: Arne Burmeister > Assignee: Sven Boden > Fix For: 2.2.0 > > I am using Sql Maps 2.1.5 with Spring 1.2.4. > I have a method as following. > I want to get the number of rows updated in the batch . > But it always returns 0. > public int insertBatchError(final List batchErrorList) { > Integer count = (Integer) getSqlMapClientTemplate().execute(new > SqlMapClientCallback() { > public Object doInSqlMapClient(SqlMapExecutor executor) throws > SQLException { > executor.startBatch(); > for (int i = 0; i < batchErrorList.size(); i++) { > BatchErrorDTO batchErrorDto = (BatchErrorDTO) > batchErrorList.get(i); > executor.update("insertBatchError", batchErrorDto); > } > int count = executor.executeBatch(); > return new Integer(count); > } > }); > > return count.intValue(); > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira