2017-03-01 3 views
0

私は、Javaに新しいですが、いくつかのサイファーコードを実行する単純なJavaプロシージャを記述しようとしています。のNeo4j:問題のJavaプロシージャを記述(@Procedureはこのロケーションでは使用できません)

まず、私は手順なしでそれをやろうとしました。次のコードを参照してください。それは正常に動作し、ローカルデータベース(Community Edition)のノード数を返します。

package neo4j.java.examples; 

import java.io.File; 
import java.util.Map; 

import org.neo4j.graphdb.GraphDatabaseService; 
import org.neo4j.graphdb.Result; 
import org.neo4j.graphdb.factory.GraphDatabaseFactory; 

public class ExecuteCypher1 { 
public static void main(String[] args){ 

    GraphDatabaseFactory dbFactory = new GraphDatabaseFactory(); 
    File dbpath = new File("C:/../JavaTestDB"); 
    GraphDatabaseService db= dbFactory.newEmbeddedDatabase(dbpath); 

    String query = "match (n) return count(n)"; 

    Result result = db.execute(query); 

    while (result.hasNext()) 
    { 
     Map<String, Object> row = result.next(); 
     for (String key : result.columns()) 
     { 
      System.out.printf("%s = %s%n", key, row.get(key)); 
     } 
    } 
} 
} 

は、その後、私は手順としてそれをrewrteしようとした:

package neo4j.java.examples; 

import java.util.Map; 

import org.neo4j.graphdb.GraphDatabaseService; 
import org.neo4j.graphdb.Result; 
import org.neo4j.procedure.Context; 
import org.neo4j.procedure.Procedure; 

public class ExecuteCypher2 { 

    @Context 
    public GraphDatabaseService db; 

    @Procedure(name = "neo4j.java.countN") 

    String query = "match (n) return count(n)"; 

    Result result = db.execute(query); 

    while (result.hasNext()) 
    { 
     Map<String, Object> row = result.next(); 
     for (String key : result.columns()) 
     { 
      System.out.printf("%s = %s%n", key, row.get(key)); 
     } 
    } 
} 

私が持っている問題は、「注釈@Procedureはこのロケーションでは使用できません」と私に言って、@Procedureがマークされていることです。誰かが間違いがどこにあるのか教えてもらえますか? Iはorg.neo4j.procedure.Procedure;とのNeo4jのテンプレートの例でインポート(https://neo4j.com/docs/developer-manual/current/extending-neo4j/procedures/ - secion 6.1.3.3)を@Procedureは限り私はそれを見るのと同じ位置にあります。

あなたは

EDITありがとう: 私はマニュアルを読み、のNeo4j-手続きをwiritingするのjava-初心者のためのそれは容易ではないことを知っています。しかし、私はまだ簡単な例を試してみたい。私はエラーなしで(Neo4j procedure example)をコンパイルしましたが、mode = WRITEを削除し、それに応じてエラーは発生しません。 (「タイプPerformsWritesが廃止されました」とimport static org.neo4j.procedure.Procedure.Mode.WRITE coudn'tが解決するようimport org.neo4j.procedure.PerformsWritesをマークした。)

答えて

0

は、Javaに新しいしているなら、あなたはおそらくのNeo4jの手順を書き始めるべきではありません。それはちょうど良い初心者の運動ではありません。あなたが特定のAPIを使用して着手する前に

最初の十分のJavaを習得してください。

注釈がメソッドに表示されます。

詳細なドキュメントhttp://neo4j.com/docs/developer-manual/current/extending-neo4j/procedures/ とサンプルプロジェクトがあります:https://github.com/neo4j-examples/neo4j-procedure-template

+0

ありがとうございます。私は初心者にはそれほど良くないと知っていますが、近いうちにneo4j proceudresを書く必要があるかもしれないので、私はまだ試してみたいと思っています。 「注釈はメソッドに移ります」とはどういう意味ですか? 私はドキュメントを読んで、サンプル・プロシージャ・テンプレートを実行しています(多かれ少なかれ/少なくともエラーはありません)。注: 'mode = WRITE'とそれに応じたインポートを削除して実行しました。インポートは 'org.neo4j.procedure.PerformsWrites'はorg.neo4j.procedure.Procedure.Mode.WRITE'が解決さcoudnt'「タイプの推奨されていませんPerformsWrites」およびインポート静的..その上の任意のヒントとしてマークされていましたか? – user7400000

0

あなたはこれが基本であるあなたのコード

public static void myMethod(){ 
{ 
    while (result.hasNext()) 
    { 
     Map<String, Object> row = result.next(); 
     for (String key : result.columns()) 
     { 
      System.out.printf("%s = %s%n", key, row.get(key)); 
     } 
    } 
} 

を格納するための方法を書いていません。基本的なJavaチュートリアルを最初にやる価値があるかもしれません。

+0

ありがとうございます。ご覧のとおり、私はこれを通常のJavaプログラムとして実行する最初のコードに含めました。手順を書こうとしたとき、私はNeo4jページ(https://neo4j.com/docs/developer-manual/current/extending-neo4j/procedures/)の例に従うことを決めました。 Neo4j内からJavaコードをプロシージャとして呼び出す必要があります。だから私は、この場合にメソッドが必要かどうかわかりません。私はNeo4jの例でメソッドが表示されない...または私はそれを見ていないのですか?たぶんあなたは私がそれを把握するのを助けることができます。ありがとう! Neo4jテンプレートでは – user7400000

+0

が必要です。それを関数にラップし、適切なアノテーションを追加すればうまくいくはずです。例には関数があります...それぞれは 'search'と 'index'と呼ばれます。最初のものは公開ストリーム検索(@Name( "label")文字列ラベル、 @Name( "query")文字列クエリ) – user2587614

+0

ありがとうございます。私は一度それを試してみるつもりです。 – user7400000

関連する問題