2017-03-19 3 views
2

私の趣味のプロジェクトで始めたばかりですが、ここでは正しいデータベース設計/クエリの作成に役立つためにここに来ました。私は、フォルダのコンテンツをループする簡単なJavaプログラムを作った。私はこのコンテンツをMySQLデータベースに保存したいので、Javaでデータベースにコネクタを追加し、テーブルとカラム "file"、 "path"、 "id" dateをMySQLに追加しました。ファイル名を格納するための適切なソリューションを探してください

So今重要な/楽しい事に、私はJavaでのMySQLにファイル名を追加するたびに、私、この(GUIボタンが押されたときに、私が行うメソッドを呼び出す)ん:

  1. は、すべてのエントリを削除します
  2. Javaループ:ファイル情報をID、パス、ファイル名と日付の列にINSERTすることで、ファイルパスを変更することができます。ファイルがデータベースに追加されたとき。

このようにして、データベースに追加されるファイル名が常に最新であることを常に確認できます。ファイルの名前を変更したり、名前を変更しても問題はありません。テーブルのエントリが削除され、新しい情報が書き込まれるため、日付が必要です。古い情報 - >古い情報を削除する - 新しい情報を挿入する - >最新の情報。

私はこれがおそらく最良の解決策ではないことは知っていますが、それはうまくいきますが、今私は次のことに取り組んでいます。私は2つの挿入の間にどのファイルが追加され削除されたかを知るためにファイルの違いを追加したいと思います。そして、新しいINSERTの前にエントリが削除されるので、私の問題です。どのようにデザインやソリューションを変更しますか?すべてのアイデアは歓迎しています。私はとても新鮮なので、クエリがどのように見えるかを私に見せていただければ幸いです。

+0

あなたは単にすべてを削除する前にあなたにdbを照会することができます。古い情報を照会する - >新しい情報と比較する - >古い情報を削除する - >新しいものを挿入する – rptmat57

答えて

0

最初にすべての行を削除しないでください。削除されたものだけを削除してください(または、イベントが改善され、以下に示すように「非アクティブ」とマークしてください)。あなたのDBを最初に照会して、前回何があったかを確認してください。

"inactive"という追加の列をテーブルに保持します。デフォルトではFALSE、削除されたファイルではTRUEになります。あなたのファイルはfile + path + idによって一意に識別されるので、実際には古いファイルを削除して新しいファイルを作成する操作です。

DBから何かを削除するのは良い方法ではありません。いつも何かを偶発的に削除すると(コードのバグ)、データを元に戻すことができないからです。

追加することは、テーブルにハッシュを追加することです。この方法で、ファイルが実際に変更されたかどうかを確認することができます。変更されていないので、ファイルをDBに再追加する必要はありません。詳細はGetting a File's MD5 Checksum in Javaを参照してください。

0

これを達成する1つの方法は、テーブルの監査を実装することです。一般的なアプローチは、フォルダの内容を格納するテーブルのコピーを作成し、そのテーブルに監査情報(たとえば_AUD)が格納されていることを示す規則を使用して名前を付けることです。次に、 "REV"(リビジョン)、 "REV_TYPE"(挿入、削除、変更)のように、AUDテーブルに列を追加します。メインテーブルの行を挿入、更新、または削除するたびに、AUDテーブルに行を挿入して、実行したことを記述します。次に、各リビジョンに関連付けられているオペレーションをAUDテーブルで参照することによって検索できます。この機能を提供するJavaフレームワークは、休止状態(http://hibernate.org/orm/envers/)です。

関連する問題