如何使用java删除neo4j嵌入式数据库?

时间:2011-03-17 07:10:52

标签: neo4j

GraphDatabaseService似乎没有提供任何删除/清除数据库的方法。有没有其他方法可以使用Java删除/清除当前的嵌入式数据库?

4 个答案:

答案 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();