无SQL的Java表实现

无SQL的Java表实现,java,linked-list,hashtable,Java,Linked List,Hashtable,我正在实现事务的No-undo/redo算法。我计划使用Java的内置功能,而不是使用SQL表。但我不确定如何充分利用它们。因此,任何对我的实施有正确方向的帮助或指点都将不胜感激。我的任务如下 TransactionID Transaction_Status Transaction_Items 1 Active NIL TransactionID Transaction_Status

我正在实现事务的No-undo/redo算法。我计划使用Java的内置功能,而不是使用SQL表。但我不确定如何充分利用它们。因此,任何对我的实施有正确方向的帮助或指点都将不胜感激。我的任务如下

 TransactionID     Transaction_Status     Transaction_Items

       1                Active                   NIL
TransactionID       Transaction_Status      Transaction_Items

      1                   Commit                   X
每当我得到一个新的事务时,我必须将它插入到事务表中。假设我得到一笔交易,如下所示

b1

因此,我的交易表如下所示

 TransactionID     Transaction_Status     Transaction_Items

       1                Active                   NIL
TransactionID       Transaction_Status      Transaction_Items

      1                   Commit                   X
现在,当我收到一个要使用相同事务ID写入的项目时,我必须单独更新transaction_items列

我收到的交易项目如下所示

W1(X,2,0)

遇到提交事务后

C1

我的交易表应更新如下

 TransactionID     Transaction_Status     Transaction_Items

       1                Active                   NIL
TransactionID       Transaction_Status      Transaction_Items

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

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


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

X Y

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

transactionitem.set(i,transactionupdate)


谢谢大家的帮助。如果你需要更多信息,请告诉我

我认为您使用数据库的方法是正确的,如果将其转储,您将损失很多

就丰富性而言,使用本地SQLite数据库来保存对象确实很难

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

  • 对任何表格数据使用任意列列表,并向用户提供按任何列排序的功能—您所需要做的只是更改ORDERBY子句
  • 通过创建适当的索引,您可以保持最高的性能,即使对象列表非常大
  • 使用标准SQL进行数据操作(使用索引-非常快!)
  • 您可以利用SQLite提供的真实事务,并且可以始终保证数据的一致性
  • 如果您的Java应用程序退出或更糟的崩溃,那么您的所有Java对象都将消失。但是,若您将它们保存在数据库中,那个么只需在开始时从数据库中读取它们,就可以从停止的地方继续—并没有必要考虑序列化或反序列化(或者,至少这应该不是什么问题)
  • 在某些情况下,您不希望将数据保留在磁盘上—这很好。通过使用
    :mem:
    作为数据库文件名,简单地使用SQLite内存数据库-使用SQL进行快速数据操作非常快速和方便

非常感谢您的回复。我可以连接到数据库并轻松地执行操作。然而,我想学习java中的一些复杂结构。是否可以用java实现(我看到了很多特性,比如ArrayList、LinkedList、HashedList、maps等等)。然而,我不知道该从哪里开始使用,当然,选择权在你。最后,您可能会在没有SQL的情况下为Java表重新发明轮子,比如。但是,您提到的几乎所有映射到SQL的东西都非常好,而且与Java不同,它们不受内存的限制:arraylist=>table、map=>Tablewithindexed unique key column,等等。。。