如何使用Java删除Neo4j嵌入式数据库?

10

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

4个回答

6
只需执行 GraphDatabaseService.shutdown(),等待其返回后,删除数据库文件(使用类似此代码)。
您还可以使用 getAllNodes() 遍历所有节点,删除它们的关系和节点本身。也许应避免删除引用节点。
如果您的用例是测试,则可以使用 ImpermanentGraphDatabase,它将在关闭后删除数据库。
要使用ImpermanentGraphDatabase,请将neo4j-kernel测试jar /依赖项添加到您的项目中。在maven central上找到以“tests.jar”结尾的文件请注意保留HTML标记。

除了删除文件,还有其他方法吗? - zbdiablo
请参阅http://wiki.neo4j.org/content/Testing_with_Neo4j#Use_the_ImpermanentGraphDatabase。 - DNA

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的维基上找到了它。我在这个讨论中找到了另一个解决方案。您可以使用Blueprint API,它提供了clear方法。


1

像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方法则是在创建该对象之后调用。

0

这里有一个辅助类

Neo4jHelper.cleanDb(db);

它来自org.springframework.data.neo4j.support.node.Neo4jHelper,你所引用的数据库是GraphDatabaseService。

你还有能力将其转储:

Neo4jHelper.dumpDb();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接