Как связаться с локальной базой данных в Neo4j? - PullRequest
0 голосов
/ 18 февраля 2019

Просто для теста для шифрового запроса из Java-кода я попытался выполнить следующие шаги:

  1. Загрузите Neo4j и распакуйте его в каталог на компьютере Windows
  2. После этого я запускаю две команды bin\neo4j install-service и bin\neo4j start
  3. Затем проверьте в браузере Chrome [http://localhost:7474/browser/], что Neo4j работает нормально.

Теперь на стороне Java-кода (Junit Test case) у меня естькод ниже

private GraphDatabaseService db;
private ExecutionEngine executionEngine;
 @Before
    public void init() {
        this.db = new ImpermanentGraphDatabase();
        this.executionEngine = new ExecutionEngine(this.db);
}

Как и в приведенном выше коде, используется внутренняя БД, поэтому я изменил этот код и попытался использовать свой сервер Neo4j, который я установил выше

    @Before
    public void init() {
        GraphDatabaseFactory factory = new GraphDatabaseFactory();
        this.db = factory.newEmbeddedDatabase("C:\\Software\\neo4j-enterprise-3.5.1-windows\\neo4j-enterprise-3.5.1\\data\\databases");
        this.executionEngine = new ExecutionEngine(this.db);
    }

Но после выполнения всего теста[Который включает в себя тестовые случаи, которые также создают Node], он показывает два узла в db Person и 2, в то время как в тестовом примере Junit код выглядит примерно так:

 @Test
    public void executeCount() {
        final Transaction tx = db.beginTx();
        try {
            for (int i = 0; i < 10; i++) {
                db.createNode();
            }
            tx.success();
        } catch (final Exception e) {
            tx.failure();
        } finally {
            tx.finish();
        }
        final String countStatement = 
                "START n=node(*) " +
                "RETURN count(n) as nodeCount";
        final ExecutionResult result = this.executionEngine.execute(countStatement);
        Assert.assertEquals(11l, result.columnAs("nodeCount").next());
    }

API обхода

 @Test
    public void traverse() {
        final Transaction tx = db.beginTx();
        long userId = 0l;
        try {
            final Node user = db.createNode();
            user.setProperty("name", "Timmy");
            userId = user.getId();
            final Node database = db.createNode();
            database.setProperty("name", "Neo4j");
            user.createRelationshipTo(database, Relationships.LIKES);
            final Node language = db.createNode();
            language.setProperty("name", "Cypher");
            database.createRelationshipTo(language, Relationships.USES);
            tx.success();
        } catch (final Exception e) {
            tx.failure();
        } finally {
            tx.finish();
        }
        final String countStatement = 
                "START u=node(" + userId + ") " +
                "MATCH u-[:LIKES]-db-[:USES]-l " +
                "RETURN u.name as userName, db.name as dbName, l.name as languageName";
        final ExecutionResult result = this.executionEngine.execute(countStatement);
        final Map<String,Object> resultMap = result.iterator().next();
        Assert.assertEquals("Timmy", resultMap.get("userName"));
        Assert.assertEquals("Neo4j", resultMap.get("dbName"));
        Assert.assertEquals("Cypher", resultMap.get("languageName"));
    }

Может кто-нибудь сказать мне, как использовать мой установленный Neo4j Db и получить полностью созданный узел в Neo4j с запущенной БД, а не со встроенной БД?

Если нам нужно установить соединение, как обычно, мы используем Driver.getConnection("URL of Server") но в NСлучай eo4j это возможно с помощью GraphDatabaseService класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...