db4o获取特定对象android java

时间:2013-05-22 11:19:26

标签: java android db4o

我正在制作一个Android项目并且没有太多Java经验。所以我现在能够在db4o数据库中存储对象,我也可以检索所有这些。但是,如果我想获得特定项目的列表,则只返回1个项目(即使有更多项目)。

我会告诉你我的代码:

这是进入数据库的代码,这应该有效。它是类db4oHelper

中的函数
public ObjectContainer db() {

    Log.i(Db4oHelper.class.getName(), "Accessing Database...");

    if ((Db4oHelper.objectContainer == null) || ((Db4oHelper.objectContainer != null) && Db4oHelper.objectContainer.ext().isClosed())) {

        Toast.makeText(this.context, "Creating DB Config", Toast.LENGTH_SHORT).show();

        EmbeddedConfiguration c = Db4oEmbedded.newConfiguration();
        c.common().objectClass(Event.class).cascadeOnUpdate(true);
        c.common().objectClass(Event.class).cascadeOnActivate(true);
        c.common().allowVersionUpdates(true);
        c.common().detectSchemaChanges(true);
        c.common().messageLevel(2);

        Db4oHelper.objectContainer = Db4oEmbedded.openFile(c, db4oDBFullPath(this.context));

    }
    return Db4oHelper.objectContainer;
}

我还有一个类EventProvider,它扩展了db4oHelper类。编写代码以存储和获取对象。这里是即使有更多也只返回1个对象的函数。 (我是从db4o教程pdf的例子中得到的)

public List eventsFriday()
    {
        //function to get events by day (ex all events of friday)

        List <Event> events = db().query(new Predicate<Event>() {
             public boolean match(Event event) {
             return event.getDay().equals("friday");
             }
            });
        return events;
    }

所以现在我做了一个功能来获得星期五的事件,目前有2个。但它只返回1.任何人的想法?

我也想让这个功能工作多天,例如星期五,星期六和星期日。但如果我传递一个带有该函数的String,我就无法在新的Predicate函数中使用它。

类似的东西:

public List eventsByDay(**String day**)
    {
        //function to get events by day (ex all events of friday)

        List <Event> events = db().query(new Predicate<Event>() {
             public boolean match(Event event) {
             return event.getDay().equals(**day**);
             }
            });
        return events;
    }

2 个答案:

答案 0 :(得分:1)

如果声明 final ,您可以使用 day

public List eventsByDay(final String day)
{
    //function to get events by day (ex all events of friday)

    List <Event> events = db().query(new Predicate<Event>() {
         public boolean match(Event event) {
             return event.getDay().equals(day);
         }
    });
    return events;
}

答案 1 :(得分:0)

好的,所以我一直在寻找和尝试很多,而且我找到了适合现在的东西。将来必须做进一步的测试。

 public List eventsByDayTest(final String day)
    {
        //function to get events by day (ex all events of friday)

        Query query=db().query();
        query.constrain(Event.class);
        query.descend("Day").constrain(day);
        ObjectSet result=query.execute();
        return result;
    }

然后我在android上的活动类的List中捕获返回结果。