PreparedStatement.addBatch和来自文件的数千行和混乱

时间:2013-07-02 07:01:59

标签: java jdbc sybase-iq

您好我正在尝试使用包含数千行的文件中的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。请指导。非常感谢。

2 个答案:

答案 0 :(得分:1)

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

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

在真实世界的应用程序中,性能影响变得更加明显,数据库服务器几乎总是在为其他客户端提供服务的一些负载,而不是您唯一的客户端。

当与PreparedStatement配对时,批量更新甚至更有效,因为语句是预编译的,并且在批处理执行期间也会缓存执行计划。因此,变量的绑定按照您选择的批量大小进行,然后单个batchUpdate()调用一次性保留所有值。

答案 1 :(得分:0)

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