2016-05-07 16 views
2

残念ながら、このトピック/問題に固有のものは見つかりませんでした。ここに私達は行く:データベースなしのJavaFXアプリケーションからのデータの保存

私は私の友人のためのJavaFXビジネスアプリケーションを構築しています。残念ながら私はデータベースに接続する可能性はありません。私は、アプリケーションがファイルからsavestateをロードするようにしたい。アプリケーションにはクライアントのリストが含まれ、クライアントにはいくつかの特定のプロパティがあります。私はこれを.propや.txtファイルにハードコードしたくないのですが、これを行う方法が違うと確信していますから、そうではありませんか?

ありがとうございました。ありがとうございます!

+0

stackoverflowで質問を投稿する前に、解決策(コード)またはこれまでに試したことを提示することを検討してください。 –

+0

組み込みデータベース([h2](http://stackoverflow.com/tags/h2/info)など)はどうですか? – fabian

答えて

0

あなたはSQLiteのような外部ライブラリを必要としないソリューションが必要な場合は、ObjectOutputStreamの/ ObjectInputStreamのを使用することができます。

この方法では、データストアとしてファイルに保存し、Javaクラスを使用することができます。ローカルストレージにデータを永続化するための選択肢の

ObjectDB.java

public class ObjectDB implements Serializable { 
    private static final long serialVersionUID = 5864896800675704551L; 
    private List<String> list; 
    private Map<String, String> map; 

    public List<String> getList() { 
     return list; 
    } 

    public void setList(List<String> list) { 
     this.list = list; 
    } 

    public Map<String, String> getMap() { 
     return map; 
    } 

    public void setMap(Map<String, String> map) { 
     this.map = map; 
    } 
} 

ObjectTest.java

public class ObjectTest { 
    public static void main(String[] args) { 
     String FILENAME = "ObjectDB"; 

     List<String> list = new ArrayList<>(); 
     list.add("Bob"); 
     list.add("Rick"); 

     Map<String, String> map = new HashMap<String, String>(); 
     map.put("Jane", "Rick"); 
     map.put("Mike", "Bob"); 

     ObjectDB db = new ObjectDB(); 
     db.setList(list); 
     db.setMap(map); 

     try { 
      // Save Object 
      try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILENAME))) { 
       oos.writeObject(db); 
      } 

      db = null; 

      // Read Object 
      try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILENAME))) { 
       db = (ObjectDB) ois.readObject(); 
      } 

      System.out.println(db.getList()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
1

たくさん。正確な選択は、あなたのニーズに左右されます。あなたは、特定の勧告をするのに十分な詳細を記述していません。ここで

は大体あなたのデータの複雑さの昇順に、可能性のリストです。あなたは、単純な少量のデータを持っている場合

テキストファイル

は、テキストファイルに保存します。個々のファイルを別々のファイルに保存したり、1つのファイルにまとめることができます。最近のJavaのバージョンでは、これまで以上に容易にするための新しいクラスが用意されています。 Oracle Tutorialを参照してください。構造化データのセットの場合

カンマ個別の&タブ区切り

comma-separated values (CSV)またはtab-delimited valuesでテキストファイルに書き込みます。たとえば、各人物の行を持つ人のリスト、名前、電話番号、電子メールアドレスの列などがあります。

、このようなファイルのリード/ライト時に、私は、重労働を解消するバグを回避し、そして自分自身にいくつかの時間を節約するために設立され、ライブラリを使用することをお勧めし、自分自身をプログラムするために十分に簡単です。 Javaで書かれたライブラリがいくつかあります。

私のお気に入りはApache Commons CSVプロジェクトです。このライブラリは、そのようなファイルを読み書きする手間を簡単にします。名前にかかわらず、このライブラリはタブ区切り形式とコンマ区切り形式をサポートしています。私はherehere、およびhereのように、このライブラリの使い方を示すStack OverflowにいくつかのAnswersを書いています。

ちなみに、平野の古いASCIIは、データファイル内に、文書、グループ、レコード/行、およびフィールドの4つのレベルのグループ化を持つfew character positions explicitly for delimitingを定義しています。 Unicodeは、もちろん、inherits these from ASCII as code pointsです。私はこれらがなぜあまりにもあいまいで、まれにしか使われていないのか疑問に思います。データペイロード内に存在するコンマやタブを使用するよりも、はるかに論理的です。

シリアライズ

あなたがオブジェクト内に格納されたデータ値を書き出すことができます。これはシリアライゼーションと呼ばれます。 Javaにはシリアライズ機能が組み込まれていますが、詳細を勉強してください。

オブジェクトの値をより簡単に書き出し、後でオブジェクトを再構成するためにそれらを読み込むには、Simple XML Serializationプロジェクトの使用を楽しんでいます。これは比較的単純なニーズに適しており、クラスの構造が何を書くかを決定するプロセスを推進したいという状況を狙っています。

Javaには、ビルトインとサードパーティの両方のXMLバインディング機能があります。これらは、その柔軟性においてはるかに強力です。それらは、データを検証するためのXML DTDまたはXML Schemaの定義などの厳密な方法でXML構造を定義して検証したい場合や、データを表すJavaクラスを生成する場合にも特に適しています。

より複雑なデータのためのエンベデッドデータベース

、埋め込まれたリレーショナルデータベースを使用します。

SQLiteデータベースは多くのプラットフォームにバンドルされています。これは純粋なJavaではなく、Cベースのライブラリです。名前が示すように、SQLiteは確かに非常に "軽い"、厳格なデータ型や他の多くの共通データベース機能が欠けています。 SQLiteは、より深刻なデータベースに対する競合他社よりも、テキストファイルを書く代わりのものです。あなたのニーズがその能力のスイートスポットに合うなら、それは素晴らしい製品です。

埋め込みデータベースの最初の選択肢はH2 Database Engineです。純粋なJavaで構築されています。あなたのアプリの内部で実行することも、サーバーとして別々に実行することもできます。洗練されたリレーショナルデータベース機能を備えています。何年にもわたって更新されてきており、よく着用されています。主な著者は、この分野で多くの経験を積んでいます。

関連する問題