Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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 PreparedStatement.addBatch和文件中的数千行以及混乱_Java_Jdbc_Sap Iq - Fatal编程技术网

Java PreparedStatement.addBatch和文件中的数千行以及混乱

Java PreparedStatement.addBatch和文件中的数千行以及混乱,java,jdbc,sap-iq,Java,Jdbc,Sap Iq,嗨,我正在尝试使用JDBC从一个包含数千行的文件中写入Sybase IQ。人们说我应该使用batchUpdate。所以我通过NIO读取文件并将其添加到PreparedStatement批处理中。但是我看不出这对我需要做以下工作的所有行有任何好处 PreparedStatement prepStmt = con.prepareStatement( "UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?"); prepStmt.setString(1,mg

嗨,我正在尝试使用JDBC从一个包含数千行的文件中写入Sybase IQ。人们说我应该使用batchUpdate。所以我通过NIO读取文件并将其添加到PreparedStatement批处理中。但是我看不出这对我需要做以下工作的所有行有任何好处

PreparedStatement prepStmt = con.prepareStatement(    
    "UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
  prepStmt.setString(1,mgrnum1);            
  prepStmt.setString(2,deptnum1);
  prepStmt.addBatch();

我不明白批量生产的好处是什么。无论如何,我必须对文件的所有记录执行addBatch数千次。或者我甚至应该使用addBatch()将记录从文件写入sybase iq。请导游。非常感谢。

addBatch的优点是它允许jdbc驱动程序写入数据块,而不是向数据库发送单个insert语句。 在某些情况下,这可能会更快,但现实生活中的表现可能会有所不同。
还应注意,建议使用50-100行的批处理,而不是将所有数据添加到单个批处理中。

通过批处理更新,基本上可以减少网络I/O开销。它提供的好处类似于
BufferedWriter
在写入磁盘时提供的好处。基本上就是这样:缓冲数据库更新

任何类型的I/O都有成本;无论是磁盘I/O还是网络。通过在批处理中缓冲插入或更新,并执行批量更新,您可以最大限度地降低每次访问数据库并返回时产生的性能损失

在实际应用程序中,数据库服务器几乎总是在某些负载下为其他客户机服务,而在开发过程中,只有您一个客户机,这会对性能造成更大的影响


当与
PreparedStatement
配对时,批量更新更加高效,因为该语句是预编译的,并且在批处理的整个执行过程中执行计划也是缓存的。因此,变量的绑定根据您选择的批量大小进行,然后一个
batchUpdate()
调用会一次性保存所有值。

我无法理解NIO的相关性。