记录未使用ResultSet进行更新

时间:2014-04-02 23:50:53

标签: java jdbc

我在here上定义了一些JDBC内容。

我基本上是从位于test.selectiontable的一个表格11.11.1.111)抓取记录并插入22.22.2.222test.insertiontable)。这是一个基于线程的进程,所以线程将继续寻找&转移 记录直到所有记录都被转移。

由于我不想将重复记录插入到另一个表中,因此我在test.selectiontable中有一个名为DTSStatusType_ti的字段,其表中的初始值为1。因此,我在转移记录后更新它 到test.insertiontable如下:

Line # 112  SelectQueueRS.updateInt( "DTSStatusType_ti", 3 );
Line # 113  SelectQueueRS.updateString( "Queued_DialerIP_vch", 22.22.2.222 );   

Queued_DialerIP_vchtest.selectiontable的初始值为11.11.1.111

尽管我的代码中使用了上面两行代码来更新记录,但我认为这不是一种有效的更新方式。任何人都可以建议一些有效的方法来更新记录,100%确保这些记录不会重复。请随时建议我的代码中的任何更改。感谢

1 个答案:

答案 0 :(得分:1)

您可以:

,而不是更新原始查询的ResultSet
  1. 使用connMain.setAutoCommit(false)
  2. 开始交易
  3. 如果其他人可以修改数据,则应使用锁定所选行的SELECT FOR UPDATE
  4. 从查询结果中收集主键ID
  5. 插入远程数据源
  6. 使用一个更新查询,通过收集的ID(WHERE id IN (...)
  7. 更新原始表
  8. 使用connMain.commit()
  9. 提交交易

    3和4可以在同一个循环中完成。 顺便说一下,您还可以在远程数据源上启动事务并执行批量插入。 您还应该知道在try-catch块中执行事务并关闭资源。这可能有所帮助:http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html