Просто для теста для шифрового запроса из Java-кода я попытался выполнить следующие шаги:
- Загрузите Neo4j и распакуйте его в каталог на компьютере Windows
- После этого я запускаю две команды
bin\neo4j install-service
и bin\neo4j start
- Затем проверьте в браузере 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
класса?