Orientdb: база данных закрыла исключение при получении записей - PullRequest
0 голосов
/ 08 апреля 2020

Попытка получить записи из orientdb. Я получаю сообщение об ошибке ниже:

Exception in thread "main" com.orientechnologies.orient.core.exception.ODatabaseException: Database 'remote:localhost/testdb' is closed
at com.orientechnologies.orient.core.db.document.ODatabaseDocumentAbstract.checkOpenness(ODatabaseDocumentAbstract.java:2328)
at com.orientechnologies.orient.core.db.document.ODatabaseDocumentRemote.fetchNextPage(ODatabaseDocumentRemote.java:446)
at com.orientechnologies.orient.client.remote.message.ORemoteResultSet.fetchNextPage(ORemoteResultSet.java:52)
at com.orientechnologies.orient.client.remote.message.ORemoteResultSet.hasNext(ORemoteResultSet.java:47)
at com.orientechnologies.orient.core.sql.executor.OResultSet.tryAdvance(OResultSet.java:41)
at java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at com.orientechnologies.orient.core.sql.executor.OResultSet.forEachRemaining(OResultSet.java:49)
at aoa.services.impl.OrientdConnectionHandler.getResultList(OrientdConnectionHandler.java:197)
at aoa.services.impl.OrientdConnectionHandler.main(OrientdConnectionHandler.java:209)

Запрос данных с использованием следующего кода:

   ...
    try(ODatabaseSession ses_orient = getConnPool(dbnae).acquire();){
      rs = ses_orient.query(query);  
    }


    public ODatabasePool getConnPool(String dbname){
      ODatabasePool pool = new 
       ODatabasePool(orientDB,dbname,OrientDbConFactory.USER,OrientDbConFactory.PASSWORD, 
       orientDBConfig);
       connPool.put(dbname,pool);
       return pool;
    }
   ...

Запрос работает нормально, если я ограничиваю количество записей до 1000, которое равно «QUERY_REMOTE_RESULTSET_PAGE_SIZE». Если количество записей превышает 1000, я получаю сообщение об ошибке: База данных 'remote: localhost / testdb' закрыта

1 Ответ

1 голос
/ 08 апреля 2020

Я думаю, что вы используете OResultSet вне блока Try, это означает, что сеанс закрыт, и rs не может больше получать данные из базы данных.

 try(ODatabaseSession ses_orient = getConnPool(dbnae).acquire();){
     OResultSet rs = ses_orient.query(query);
     rs.stream()
        .forEach(x -> System.out.println(x.getProperty("propertyName")));
     rs.close();

}

Справочная документация:

http://orientdb.com/docs/3.0.x/java/Java-Query-API.html

...