Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:事务处理系统_Java_Sql_Database_Jdbc - Fatal编程技术网

Java:事务处理系统

Java:事务处理系统,java,sql,database,jdbc,Java,Sql,Database,Jdbc,我有表账户和行动帐户需要根据操作中存储的指令进行修改 在action中,每行包含一个帐户id、一个操作(i=插入、u=更新、d=删除、x=无效操作)和一个更新帐户的金额 在插入时,如果帐户已存在,则应进行更新 反而 在更新时,如果帐户不存在,则由 插入 在删除时,如果该行不存在,则不执行任何操作 输入 账户: +---id----value--+ | 1 | 1000 | | 2 | 2000 | | 3 | 1500 | | 4 | 6500

我有表
账户
行动
<代码>帐户需要根据
操作
中存储的指令进行修改
action
中,每行包含一个帐户id、一个操作(i=插入、u=更新、d=删除、x=无效操作)和一个更新帐户的金额

  • 在插入时,如果帐户已存在,则应进行更新 反而
  • 在更新时,如果帐户不存在,则由 插入
  • 在删除时,如果该行不存在,则不执行任何操作

输入

账户:

+---id----value--+
|   1  |   1000  |
|   2  |   2000  |
|   3  |   1500  |
|   4  |   6500  |
|   5  |    500  |
+----------------+
+---id----value--+
|   1  |    399  |
|   2  |    800  |
|   3  |    599  |
|   4  |   1400  |
|   6  |  20099  |
|   7  |   1599  |
+----------------+
行动:

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

输出

账户:

+---id----value--+
|   1  |   1000  |
|   2  |   2000  |
|   3  |   1500  |
|   4  |   6500  |
|   5  |    500  |
+----------------+
+---id----value--+
|   1  |    399  |
|   2  |    800  |
|   3  |    599  |
|   4  |   1400  |
|   6  |  20099  |
|   7  |   1599  |
+----------------+
行动:

+---account_id---o---new_value---status---+
|       3      | u |     599   |          |
|       6      | i |    2099   |          |
|       5      | d |           |          |
|       7      | u |    1599   |          |
|       1      | i |     399   |          |
|       9      | d |           |          |
|      10      | x |           |          |
+-----------------------------------------+
+---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很有经验,但不幸的是,我不知道如何从这里开始。

我还需要一张桌子吗?我必须使用触发器吗?

我已经看到了两种向上插入的技术。使用第一种技术,在事务中,首先测试行是否存在,并使用结果确定是执行插入还是更新。使用第二种技术,您可以尝试执行更新并验证更新的记录数(JDBC提供了这一点)。如果为零,则进行插入,如果为一,则完成插入。

为此做了什么?是否必须将其完全放入SQL?或者可以从java代码生成状态消息?如果是java代码,那么上面的逻辑应该很容易编码。不管怎样,你要把i,o,u的解析放在java代码中,这样你就可以在那里完成其余的逻辑,而不需要触发器之类的东西。不,这取决于我,如何解决它。我只是不知道如何开始。我需要额外的表吗?@user1170330,您的问题陈述基本上描述了从操作表中读取每一行、执行它所说的操作以及更新它的状态。要求的创造性非常少。因此我只需要遍历
操作
中的每一行,相应地修改
帐户
,然后更新
操作
中的列
状态
?我不需要额外的表?第二种方法会更快,因为第一种方法会检查存在性两次(更新、插入都需要检查)。