2011-03-17 69 views

回答

6

只需执行GraphDatabaseService.shutdown(),并在返回后,删除数据库文件(使用代码如this)。

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

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

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

+0

除删除文件之外还有其他办法吗? – zbdiablo 2011-03-17 10:26:20

+0

请参阅http://wiki.neo4j.org/content/Testing_with_Neo4j#Use_the_ImpermanentGraphDatabase – DNA 2011-12-02 09:24:29

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的维基。我在this discussion中发现了另一个解决方案。您可以使用Blueprint API,它提供了清晰的方法。

1

像nawroth说,测试你应该使用ImpermanentGraphDatabase。它几乎可以自动修复所有问题。

如果你没有测试,真的有两种方法。我通常有两种方法可供我使用。一个是clearDB方法,其中我递归删除数据库路径。我用的是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和您引用的DB是一个GraphDatabaseService)

您也有能够转储它:

Neo4jHelper.dumpDb(); 
相关问题