类GraphDatabaseService
似乎没有提供任何删除/清除数据库的方法。有没有其他方法可以使用Java删除/清除当前的嵌入式数据库?
答案 0 :(得分:6)
只需执行GraphDatabaseService.shutdown()并在返回后删除数据库文件(使用this等代码。)
您还可以使用getAllNodes()迭代所有节点,删除它们之间的关系和节点。也许避免删除引用节点。
如果您的用例正在测试,那么您可以使用ImpermanentGraphDatabase,这将在关闭后删除数据库。
要使用ImpermanentGraphDatabase,请将neo4j-kernel测试jar / dependency添加到您的项目中。查找名称以“tests.jar”on maven central结尾的文件。
答案 1 :(得分:1)
我认为最简单的方法是使用neo4j数据库删除目录。我在运行所有测试后的junit测试中都这样做了。这是我使用的函数,其中 file 是neo4j目录:
public static void deleteFileOrDirectory( final File file ) {
if ( file.exists() ) {
if ( file.isDirectory() ) {
for ( File child : file.listFiles() ) {
deleteFileOrDirectory( child );
}
}
file.delete();
}
}
我想我是在neo4j维基上找到的。我在this discussion找到了另一个解决方案。您可以使用Blueprint API,它提供方法清除。
答案 2 :(得分:1)
就像nawroth所说,为了测试你应该使用ImpermanentGraphDatabase。它几乎可以自动解决您的所有问题。
如果你没有测试,真的有两种方法。我通常有两种方法可供我使用。一个是clearDB方法,其中我递归地删除了DB路径。我使用FileUtils库,它只是一行代码:
FileUtils.deleteRecursively(new File(DB_PATH));
另一个是使用removeAllNodes方法删除数据库中的每个节点,除了REFERENCE NODE。有一个简单的查询,你执行如下:
engine.execute("START n = node(*), ref = node(0) WHERE n<>ref DELETE n");
需要注意的重要一点是,在创建新的EmbeddedGraphDatabase对象之前,必须调用clearDB方法。在您创建此对象之后调用removeAllNodes方法。
答案 3 :(得分:0)
有一个助手类
Neo4jHelper.cleanDb(db);
(它来自org.springframework.data.neo4j.support.node.Neo4jHelper,您引用的数据库是GraphDatabaseService)
您还可以转储它:
Neo4jHelper.dumpDb();