0

我正在实现事务的 No-undo/redo 算法。我打算使用 Java 的内置功能而不是使用 SQL 表。但我不确定如何充分利用它们。因此,我们将非常感谢任何为我的实施提供正确方向的帮助或指示。我的任务如下。

每当我得到一个新事务时,我都必须将它插入到事务表中。假设我得到如下交易。

b1;

所以,我的交易表如下。

 TransactionID     Transaction_Status     Transaction_Items

       1                Active                   NIL

现在,当我收到要写入具有相同事务 ID 的项目时,我必须单独更新 transaction_items 列。

我收到的交易项目如下。

W1(X,2,0);

TransactionID      Transaction_Status      Transaction_Items

     1                   Active                  X

在我遇到提交事务后,

C1;

我的交易表应该更新如下。

TransactionID       Transaction_Status      Transaction_Items

      1                   Commit                   X

我可以使用 SQL 表实现上述结构并轻松更新列。但我计划使用 java 本身提供的丰富实现。我决定使用链表来实现。但我无法在链表中设置键。基本上,我正在尝试实现一个链表数组。我无法清楚地理解这个概念。任何在正确方向上实施上述内容的帮助将不胜感激。

如果需要更多信息,请告诉我。


我正在使用 arraylist 来实现我讨论过的上述结构。set 语句覆盖了我之前设置的值。通过这种方式,我可以模拟db更新操作。假设最初我的 transactionitem arraylist 有以下项目。

X Y

现在我想在 X 上添加另一个 Z(比如 XZ)。我正在使用以 arraylist.size 作为上限的 for 循环遍历该特定实例。找到我的特定项目后,我会将现有值复制到本地字符串。之后,我将连接需要插入的所需值。完成后,我使用下面的行来进行实际更新。

transactionitem.set(i, transactionupdate);

感谢大家的帮助。如果您需要更多信息,请与我们联系。

4

1 回答 1

0

我认为您在数据库方面一直走在正确的轨道上,并且通过倾销它,您将损失很多。

在丰富性方面,使用本地 SQLite 数据库来保存您的对象真的很难被击败。

以下是一些仅在 Java 中很难实现的问题,但您可以从 SQLite(+Java) 免费获得它们:

  • 对任何表格数据使用任意列列表,并为用户提供按任何列排序 - 您需要做的就是更改 ORDER BY 子句。
  • 通过创建适当的索引,您可以保持最高性能,即使对象列表非常大。
  • 使用标准 SQL 进行数据操作(使用索引 - 非常快!)。
  • 您可以使用 SQLite 必须提供的真实事务,并且可以始终保证数据的一致性
  • 如果你的 Java 应用程序退出或更糟——崩溃,你所有的 Java 对象都消失了。但是,如果您将它们保存在数据库中,您只需在开始时从数据库中读取它们,您就可以从中断的地方继续 - 无需考虑序列化或反序列化(或者,至少它应该不是问题) .
  • 在某些情况下,您不想将数据保存在磁盘上——这很好。只需使用 SQLite 内存数据库:mem:作为数据库文件名 - 使用 SQL 进行快速数据操作非常快速且非常方便。
于 2013-02-18T05:52:12.943 回答