2016-10-23 3 views

答えて

1

結果は、結果行のストリームを表すneo4j_result_stream_tとして返されます。結果の列の数はneo4j_nfieldsで、neo4j_fieldnameでの名前はneo4j_result_stream_tポインタをパラメータとして取ります。

結果の行を反復処理するには、neo4j_fetch_nextを使用してneo4j_result_tを返します。行(フィールド)から各列の値を抽出するには、ポインタをneo4j_result_field(列のインデックスとともに)に渡します。

の例では、このようなものになるだろう:

neo4j_result_stream_t *results = 
     neo4j_run(session, "MATCH (n) RETURN n.name, n.age", neo4j_null); 
if (results == NULL) 
{ 
    neo4j_perror(stderr, errno, "Failed to run statement"); 
    return EXIT_FAILURE; 
} 

int ncolumns = neo4j_nfields(results); 
if (ncolumns < 0) 
{ 
    neo4j_perror(stderr, errno, "Failed to retrieve results"); 
    return EXIT_FAILURE; 
} 
neo4j_result_t *result; 
while ((result = neo4j_fetch_next(results)) != NULL) 
{ 
    unsigned int i; 
    for (i = 0; i < ncolumns; ++i) 
    { 
     if (i > 0) 
     { 
      printf(", "); 
     } 
     neo4j_value_t value = neo4j_result_field(result, i); 
     neo4j_fprint(value, stdout); 
    } 
    printf("\n"); 
} 
+0

多くのおかげで、フォローアップ:あなたは名前でフィールドを呼び出すことができますか? 'neo4j_result_field(result、" age ")'のように?それほど知的ではありません:私は年をどのようにして「int」として戻しますか?私はあなたの 'string'の例を見ました。 –

+1

残念ながら。 [Bolt Protocol](http://boltprotocol.org)は、結果の各列に一意の名前が付いていることを保証していないので、あいまいな結果が返される可能性があります。 –

+1

これは、私がチェックして、Neo4jは重複した列名を返すCypherコマンドの実行を拒否します。実際にはこれに遭遇する可能性は低いので、おそらくラッパー関数をかなり安全に作成することができます。 –

関連する問題