Java:事务处理系统

时间:2012-05-13 02:40:22

标签: java sql database jdbc

我有表accountsactionaccounts需要根据action中存储的指令进行修改 在action中,每行包含一个帐户ID,一个操作(i =插入,u =更新,d =删除,x =无效操作)以及更新帐户的金额。

  • 在插入内容中,如果该帐户已存在,则应进行更新 代替
  • 在更新时,如果该帐户不存在,则由a创建 插入
  • 在删除时,如果该行不存在,则不执行任何操作

输入

帐户:

+---id----value--+
|   1  |   1000  |
|   2  |   2000  |
|   3  |   1500  |
|   4  |   6500  |
|   5  |    500  |
+----------------+

动作:

+---account_id---o---new_value---status---+
|       3      | u |     599   |          |
|       6      | i |    2099   |          |
|       5      | d |           |          |
|       7      | u |    1599   |          |
|       1      | i |     399   |          |
|       9      | d |           |          |
|      10      | x |           |          |
+-----------------------------------------+

输出

帐户:

+---id----value--+
|   1  |    399  |
|   2  |    800  |
|   3  |    599  |
|   4  |   1400  |
|   6  |  20099  |
|   7  |   1599  |
+----------------+

动作:

+---account_id---o---new_value-------------------status----------------+ 
|       3      | u |     599   | Update: Success                       |
|       6      | i |   20099   | Update: Success                       |
|       5      | d |           | Delete: Success                       |
|       7      | u |    1599   | Update: ID not founds. Value inserted |
|       1      | i |     399   | Insert: Acc exists. Updated instead   |
|       9      | d |           | Delete: ID not found                  |
|      10      | x |           | Invalid operation: No action taken    |
+----------------------------------------------------------------------+

我对Java和JDBC很有经验,但不幸的是我只是不知道,如何从这里开始。
我需要一张额外的桌子吗?我必须使用触发器吗?

1 个答案:

答案 0 :(得分:0)

我见过两种upsert方法。使用第一种技术,在事务中,首先测试该行是否存在,然后使用结果确定是执行插入还是更新。使用第二种技术,您尝试执行更新并验证更新的记录数(JDBC为您提供此信息)。如果它为零,那么你做一个插入,如果一个,那么你就完成了。