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