0

您好我正在尝试使用 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。请指导。非常感谢。

4

2 回答 2

1

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

任何类型的 I/O 都有成本;无论是磁盘 I/O 还是网络。通过批量缓冲插入或更新并进行批量更新,您可以最大限度地减少每次访问数据库并返回时对性能造成的影响。

在现实世界的应用程序中,数据库服务器几乎总是处于为其他客户端服务的负载下,而不是只有你一个人的开发,性能损失变得更加明显。

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

于 2013-07-02T07:58:11.783 回答
0

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

于 2013-07-02T07:33:39.127 回答