【问题标题】:how to store TimeStamp into db4o database如何将时间戳存储到 db4o 数据库中
【发布时间】:2012-10-04 11:13:40
【问题描述】:

我正在尝试将时间戳存储到 db4o 数据库中,但存储的时间戳与当前日期大不相同。

以下是示例输出:

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

在我运行我的代码三次之后,之前存储的两个时间戳被存储为 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();
    }
  }
}

我阅读了以下两篇相关文章,但问题尚未解决。

article 1article 2

请告诉我如何解决这个问题。谢谢。

【问题讨论】:

  • 我应该将时间戳作为字符串类型存储到数据库中吗?每次程序从数据库中检索数据后,需要将字符串值转换为Timestamp对象。
  • 我将这篇文章复制到page 的db4o 论坛。希望听到一些答案。谢谢。

标签: java timestamp field db4o transient


【解决方案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。

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2017-02-02
    • 2016-08-24
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多