请教一个executeBatch()的问题

03-04-12 ax3536

我这里的DB2/400系统,采用IBM的DB2/400 JDBC驱动程序。
要执行一个批量的SQL语句。
Statement stmtBat=null;
String sql="insert into oslsdmod.batch_test values(13,'dddddd');insert into oslsdmod.batch_test values(14,'dddddd')";

StringTokenizer st = new StringTokenizer(sql, ";");

String ss="";
int j=st.countTokens()-1;
System.out.println("countTokens="+j);

for (int i=0;i<j;i++){
ss=st.nextToken();
stmtBat.addBatch(ss);
System.out.println("ss="+ss);
}

int[] oo=stmtBat.executeBatch();
总是出现下面这个错误
SQLException: [SQL7008] OSLSDMOD中的BATCH00001对操作无效。
SQLState: 55019
Message: [SQL7008] OSLSDMOD中的BATCH00001对操作无效。
Vendor: -7008
Update counts:
但是如果我使用JDBC ODBC桥访问,就不会出现这个问题。哪位大虾解释一下啊?着急!谢谢先

Jevang
2003-04-13 00:42

AS400 JDBC driver may not support batch update. e.g. In UDB7.2, I know for sure executeBatch does not return you the correct count so it make it useless.

Try to convert your plain sql into multiple prepared statements, try it again.

I don't have AS400 environment so I can only guess. I have several AS400 customers, never heard that they use batch update.

ax3536
2003-04-13 11:43

我试过了,DB2/400的JDBC驱动是支持executeBatch操作的。我昨天发现了问题,如果我去掉conn.setAutoCommit(false)和conn.commit()这些跟事务相关的语句,批量执行就可以了。

但是如果我使用IBM Client Access 的ODBC驱动程序,可能是因为这个ODBC有一些特殊设置的缘故,事务的操作可以完成。

怪事情了,DB2/400自己的JDBC驱动居然不能完成事务