10

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

4

4 回答 4

6

只需执行GraphDatabaseService.shutdown()并在它返回后,删除数据库文件(使用这样的代码

您还可以使用getAllNodes()遍历所有节点,删除它们的关系和节点本身。也许避免删除参考节点。

如果您的用例正在测试,那么您可以使用ImpermanentGraphDatabase,它将在关闭后删除数据库。

要使用 ImpermanentGraphDatabase,请将 neo4j-kernel 测试 jar/依赖项添加到您的项目中。在 maven central 上查找名称以“tests.jar”结尾的文件。

于 2011-03-17T09:17:30.600 回答
1

我认为最简单的方法是删除带有 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 。

于 2011-04-14T19:48:35.353 回答
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 方法在您创建此对象后调用。

于 2012-12-19T12:26:37.327 回答
0

有一个助手类

Neo4jHelper.cleanDb(db);

(它来自 org.springframework.data.neo4j.support.node.Neo4jHelper 并且您引用的数据库是 GraphDatabaseService)

您还可以转储它:

Neo4jHelper.dumpDb();
于 2014-12-05T22:22:34.087 回答