【问题标题】:Can I replace a sequence of database operations with batch我可以用批处理替换一系列数据库操作吗
【发布时间】:2015-08-03 22:10:16
【问题描述】:

我检查了几个executeBatch的例子,但似乎我们只能在一个批处理中添加一种语句。但是我手头有一个问题,我需要执行 2 个更新查询,然后执行一个插入查询。有没有办法批量这样做。

我必须从一组 XML 文件中解析大约 100 000 条记录,并为每条记录更新我的数据库。每条记录都包含一个要插入数据库的日期范围。例如,如果我在 DB 中有以下 2 条记录

 Record A - range of 1st Jan 2000 to 31st Dec 2010 
 Record B - range of 1st Jan 2011 to 31st Dec 2020

现在,如果新记录出现在以下范围内

 Record N - range of 1st Jan 2005 to 31st Jan 2014

为了添加这条记录,我需要执行以下 2 个更新查询和一个插入查询

 Update end date of Record A to 31st Jan 2004
 Update start date of Record B to 1st Jan 2015
 Insert record N

我想知道是否可以批量执行 2 次更新和 1 次插入,然后移动到下一条记录,依此类推。

我可以有单独的批次进行插入和更新,但假设要对尚未插入的记录进行更新,反之亦然,我会遇到问题。所以顺序很重要。感谢您的帮助

【问题讨论】:

    标签: java database


    【解决方案1】:

    异构批处理是不可能的。

    如果您使用的是准备好的语句(正如您应该使用的那样),则不可能进行异构批处理,因为 PS 创建会在尝试在更新中绑定您的变量时出现问题,并且无法正常工作。但是,您可以编写一个需要

    的存储过程

    ([RecordIds to update], endupdate, startupdate, startinsert, endinsert ,[other_details])

    作为参数。然后,在检查您的条件后,使用相应的值执行您的程序,这将是

    RecordAid, endupdate, RecordBid, startupdate, RecordNid, startinsert, endinsert
    

    注意:这将消除批处理的优势。就像执行两次更新然后插入一样好。我宁愿建议一起批量更新并单独运行插入。

    【讨论】:

    • 感谢您的回答,这是我希望听到但找不到的。既然如此,有没有其他方法可以提高性能。我已经在使用准备好的语句,我不能去存储过程。我可以通过任何其他方式获得性能改进,或者是它
    • 您的查询顺序似乎是 update->update->insert 多次,您不能将所有更新和所有插入合并在一起。我认为没有比使用存储过程更好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多