2

タイムスタンプをdb4oデータベースに保存しようとしていますが、数分前に保存されたタイムスタンプは現在の日付とは大きく異なります。

出力例は次のとおりです。

1969-12-31 19:00:00.741
1969-12-31 19:00:00.772
2012-10-14 00:23:22.713

以前に保存された2つのタイムスタンプは、コードを3回実行した後、1969-12-31 19:00:00.7xxとして保存されました。

これがコードです。

import java.sql.Timestamp;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.EmbeddedConfiguration;

public class dbTest {

  public static void listResults(ObjectSet<Timestamp> results) {

    for (Timestamp o : results) {
      System.out.println(o);
    }
  }

  public static void main(String[] args) {

    EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
    config.common().objectClass(Timestamp.class).storeTransientFields(true);

    ObjectContainer container = Db4oEmbedded
        .openFile(config, "timestamps.db4o");

    try {

      long now = System.currentTimeMillis();
      container.store(new Timestamp(now));

      final ObjectSet<Timestamp> results = container.query(Timestamp.class);
      listResults(results);
    }
    finally {
      container.close();
    }
  }
}

以下の2つの関連記事を読みましたが、問題は解決されていません。

第1条と第2条

この問題の解決方法を教えてください。ありがとう。

4

1 に答える 1

1

行を追加することによるこの問題の解決策:

config.common().objectClass(Timestamp.class).translate(new TSerializable());

db4o フォーラムで Vidisha と Claude に助けてもらいました。ここで私は答えを共有し、他の人にも役立つことを願っています. これが新しいコードです。

import java.sql.Timestamp;   

import com.db4o.Db4oEmbedded;   
import com.db4o.ObjectContainer;   
import com.db4o.ObjectSet;   
import com.db4o.config.EmbeddedConfiguration;   

public class dbTest {   

  public static void listResults(ObjectSet<Timestamp> results) {   

    for (Timestamp o : results) {   
      System.out.println(o);   
    }   
  }   

  public static void main(String[] args) {   

    EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();   
    config.common().objectClass(Timestamp.class).translate(new TSerializable());   
    ObjectContainer container = Db4oEmbedded   
        .openFile(config, "timestamps.db4o");   

    try {   

      long now = System.currentTimeMillis();   
      container.store(new Timestamp(now));   

      final ObjectSet<Timestamp> results = container.query(Timestamp.class);   
      listResults(results);   
    }   
    finally {   
      container.close();   
    }   
  }   
}   

db4o で適切に処理できる JDK Date を使用することをお勧めします。

于 2012-10-17T00:14:17.870 に答える