请教一个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驱动居然不能完成事务

猜你喜欢