Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入大量数据时发生Java SQL异常_Java_Database_Jdbc_Db2 - Fatal编程技术网

插入大量数据时发生Java SQL异常

插入大量数据时发生Java SQL异常,java,database,jdbc,db2,Java,Database,Jdbc,Db2,我试图将大量数据从一个表插入到另一个表中。这两个表格位于不同的区域。插入数据时,ID(用于创建连接)能够插入较少行数的数据。若插入的数据超过500行,则抛出异常 SqlException:db2sql错误:SQLCODE:-551,SQLSTATE:42501,SQLERRMC:DB2GCS;执行包;NULLID.SYSLH203 我无法找到为什么在数据更多的情况下显示相同id的授权异常 My Code Snippet : while(RSet.next()){ stm

我试图将大量数据从一个表插入到另一个表中。这两个表格位于不同的区域。插入数据时,ID(用于创建连接)能够插入较少行数的数据。若插入的数据超过500行,则抛出异常

SqlException:db2sql错误:SQLCODE:-551,SQLSTATE:42501,SQLERRMC:DB2GCS;执行包;NULLID.SYSLH203

我无法找到为什么在数据更多的情况下显示相同id的授权异常

My Code Snippet : 
 while(RSet.next()){
           stmt=test_conn.prepareStatement("Insert Query");
           for(int i=1;i<=columnCount;i++){
               stmt.setString(i,RSet.getString(i));
           }
           stmt.addBatch();;
       }
       stmt.executeBatch();
我的代码片段:
while(RSet.next()){
stmt=测试连接准备状态(“插入查询”);

对于(int i=1;i,您的代码实际上没有正确地进行批处理,这可能是代码中断的原因。问题是您在不必要地反复准备insert查询

你只需要在循环外准备一次,就像

test_conn.setAutoCommit(false);
stmt = test_conn.prepareStatement("INSERT INTO ...");

while(RSet.next()){
   for(int i = 1; i <= columnCount; i++){
       stmt.setString(i, RSet.getString(i));
   }
   stmt.addBatch();
}

stmt.executeBatch();
test_conn.commit();
测试连接设置自动提交(假);
stmt=测试连接准备声明(“插入…”);
while(RSet.next()){

对于(int i=1;我非常感谢Ravi的帮助。但是在进行了您建议的更改之后,插入400条记录仍然需要大约3到4分钟。这可以更快吗?您需要分析应用程序以了解瓶颈在哪里;在Java或DB中。您可以使用
System.currentTimeMillis()
在执行之前和之后(并减去值),从应用程序所用的3到4分钟时间中找出批次所用的准确时间。