10

このクラスGraphDatabaseServiceは、データベースを削除/クリアするためのメソッドを提供していないようです。Javaで現在の組み込みデータベースをドロップ/クリアする他の手段はありますか?

4

4 に答える 4

6

GraphDatabaseService.shutdown()を実行し、戻ってきたら、データベースファイルを削除します(このようなコードを使用)。

getAllNodes()を使用して、すべてのノードを反復処理し、それらの関係とノード自体を削除することもできます。たぶん、参照ノードの削除は避けてください。

ユースケースがテスト中の場合は、ImpermanentGraphDatabaseを使用できます。これにより、シャットダウン後にデータベースが削除されます。

ImpermanentGraphDatabaseを使用するには、neo4j-kernelテストのjar/依存関係をプロジェクトに追加します。MavenCentralで「tests.jar」終わる名前のファイルを探します。

于 2011-03-17T09:17:30.600 に答える
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();
    }
}

私はそれをneo4jwikiで見つけたと思います。私はこの議論で別の解決策を見つけました。メソッドを明確にするBlueprintAPIを使用できます。

于 2011-04-14T19:48:35.353 に答える
1

nawrothが言ったように、テストにはImpermanentGraphDatabaseを使用する必要があります。それはほとんどすべての問題を自動修正します。

テストしていない場合、実際には2つの方法があります。私は一般的に2つの方法を利用できます。1つはclearDBメソッドで、DBパスを再帰的に削除します。これにはFileUtilsライブラリを使用しますが、これはほぼ1行のコードです。

FileUtils.deleteRecursively(new File(DB_PATH));

もう1つは、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 に答える