【发布时间】:2011-12-22 07:35:32
【问题描述】:
我一直在 db4o 数据库中存储一个包含 GregorianCalendar 对象的对象,它工作得很好。但是,在检索对象时(关闭并重新打开数据库后),我似乎无法访问其中的某些信息(即 get(GregorianCalendar.MONTH) )。我在下面包含了测试代码,想知道如何解决这个问题。
import static org.junit.Assert.assertEquals;
import java.util.GregorianCalendar;
import org.junit.Test;
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.config.EmbeddedConfiguration;
public class DateTest {
public class RecordDate {
private GregorianCalendar calendar;
public RecordDate() {
calendar = new GregorianCalendar();
}
public int getMonth() {
return calendar.get(GregorianCalendar.MONTH);
}
}
@Test
public void testGetMonth() {
EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
config.common().objectClass(RecordDate.class).cascadeOnActivate(true);
config.common().objectClass(RecordDate.class).cascadeOnUpdate(true);
config.common().activationDepth(25);
config.common().updateDepth(25);
ObjectContainer database = Db4oEmbedded.openFile(config,
"db/datetest.db");
GregorianCalendar currentdate = new GregorianCalendar();
RecordDate testdate = new RecordDate();
assertEquals(currentdate.get(GregorianCalendar.MONTH),
testdate.getMonth()); // this passes
database.store(testdate);
database.close();
EmbeddedConfiguration config2 = Db4oEmbedded.newConfiguration();
config2.common().objectClass(RecordDate.class).cascadeOnActivate(true);
config2.common().objectClass(RecordDate.class).cascadeOnUpdate(true);
config2.common().activationDepth(25);
config2.common().updateDepth(25);
database = Db4oEmbedded.openFile(config2, "db/datetest.db");
testdate = (RecordDate) database.queryByExample(RecordDate.class)
.next();
assertEquals(currentdate.get(GregorianCalendar.MONTH),
testdate.getMonth()); // this should pass, but doesn't
database.close();
}
}
【问题讨论】:
-
那么,您将几月存储在数据库中,您从中取出的对象是几月?
-
并不是他们不同,而是抛出了NullPointerException
-
getMonth()方法(即calendar字段为null),还是get(GregorianCalendar.MONTH)?还是equals方法?请帮助解决您的问题。 -
get(GregorianCalendar.MONTH) 抛出异常。检索时日历字段不为空,我已经检查过。
-
我检查了 API,它说 get() 不应该抛出 NullPointerException。 get(GregorianCalendar.MONTH) 之后的堆栈跟踪是 ' at java.util.Calendar.get(Unknown Source) '