0

トランザクションの元に戻す/やり直しのないアルゴリズムを実装しています。SQL テーブルを使用するのではなく、Java の組み込み機能を使用する予定です。しかし、それらを最大限に活用する方法についてはわかりません。したがって、私の実装の正しい方向へのヘルプやポインターは高く評価されます。私のタスクは以下の通りです。

新しいトランザクションを取得するたびに、それをトランザクション テーブルに挿入する必要があります。以下のような取引があったとしましょう。

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 update 操作をシミュレートできます。最初に私の transactionitem 配列リストに次の項目があるとします。

X Y

ここで、別の Z を X に追加します (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 に答える