db4o - количество записей в базе данных? - PullRequest
2 голосов
/ 26 марта 2011

Я использую db4o и мне было интересно, как я могу получить общее количество объектов в базе данных?Нет явного способа использования API;однако я могу написать запрос, чтобы просто посчитать все объекты, но я надеялся на более прямой способ сделать это.

Вальтер

1 Ответ

4 голосов
/ 26 марта 2011

Существует два способа:

Первый - запросить объект типа и затем получить счет:

  int numberOfObjects = container.query(Object.class).size();

Однако это, вероятно, медленно, потому что запрос будетпостроить список результатов всех объектов.А в большой базе данных это может занять время.

Второй - это чтение метаданных всех сохраненных классов и суммирование.Это, конечно, намного быстрее:

    int numberOfObjects = 0;
    for(StoredClass storedClass : container.ext().storedClasses()){
        // Filter out db4o internal objects
        // and filter out object which have a parent-class, because these are in the count of the parent
        if(!storedClass.getName().startsWith("com.db4o") &&
                null==storedClass.getParentStoredClass()) {
            numberOfObjects += storedClass.instanceCount();
        }
    }
    System.out.println("Number of objects stored "+numberOfObjects);

Обратите внимание, что здесь также сообщается о внутренних классах db4o.Поэтому я отфильтровываю их.

...