我对neo4j很新,我想创建一个应用程序。
通过远程服务器模式,似乎只有REST API可用于连接到neo4j。 所以我决定使用嵌入式数据库,因为我想使用neo4j提供的JAVA API。
教程中有一个示例来创建连接:
private static final String DB_PATH = "C:/Users/Hao/Documents/Neo4j/TGI_test_backup";
public static void main( String[] args ) throws IOException
{
FileUtils.deleteRecursively( new File( DB_PATH ) );
GraphDatabaseService database = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
GraphDatabaseService database = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
TraversalExample example = new TraversalExample( database );
Node joe = example.createData();
example.run( joe );
}
public TraversalExample( GraphDatabaseService db )
{
this.db = db;
// START SNIPPET: basetraverser
friendsTraversal = db.traversalDescription()
.depthFirst()
.relationships( Rels.KNOWS )
.uniqueness( Uniqueness.RELATIONSHIP_GLOBAL );
// END SNIPPET: basetraverser
}
private Node createData()
{
String query = "CREATE (joe {name: 'Joe'}), (sara {name: 'Sara'}), "
+ "(lisa {name: 'Lisa'}), (peter {name: 'PETER'}), (dirk {name: 'Dirk'}), "
+ "(lars {name: 'Lars'}), (ed {name: 'Ed'}),"
+ "(joe)-[:KNOWS]->(sara), (lisa)-[:LIKES]->(joe), "
+ "(peter)-[:KNOWS]->(sara), (dirk)-[:KNOWS]->(peter), "
+ "(lars)-[:KNOWS]->(drk), (ed)-[:KNOWS]->(lars), "
+ "(lisa)-[:KNOWS]->(lars) "
+ "RETURN joe";
Result result = db.execute( query );
Object joe = result.columnAs( "joe" ).next();
if ( joe instanceof Node )
{
return (Node) joe;
}
else
{
throw new RuntimeException( "Joe isn't a node!" );
}
}
似乎每次运行此代码时,它都会创建一个新的数据库实例,并且所有现有数据都将被覆盖。
但是需要保存数据,我不会在代码中将所有数据导入数据库......
如何解决此问题?我需要的是获得与数据库的连接并使用现有数据。
感谢。
答案 0 :(得分:3)
您会看到main
的第一行,即FileUtils.deleteRecursively( new File( DB_PATH ) );
?它为您的File
创建一个DBPATH
对象,然后在那里递归删除所有内容。这相当于在文件资源管理器中选择数据库目录并将其删除。因此,首先要从代码中删除该行,看看是否每次连接到现有数据库时都不删除和重新创建数据库。
答案 1 :(得分:0)
我只是为你的问题加上我的两分钱。
您可以将Neo4j服务器的REST API理解为传输层。您可以使用它,也可以使用驱动程序。这些驱动程序在下面使用REST API,但您不知道它。您也可以使用JDBC。