1
我正在寻找使用C++中的neo4j_client的示例。在test suite我看到neo4j_result_t,但没有按名称迭代或调用字段的示例。那可能吗?遍历C++的neo4j_client的结果
我正在寻找使用C++中的neo4j_client的示例。在test suite我看到neo4j_result_t,但没有按名称迭代或调用字段的示例。那可能吗?遍历C++的neo4j_client的结果
结果返回为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");
}
非常感谢,并跟进:您可以通过名字来称呼一个领域?像'neo4j_result_field(结果,“年龄”)'?不那么聪明:我如何让年龄回到'int'?我看到了你的'string'例子。 –
不幸的不是。 [Bolt Protocol](http://boltprotocol.org)不保证结果中的每一列都有唯一的名称,所以这样的调用可能会返回一个模糊的结果。 –
也就是说,我查了一下,Neo4j会拒绝运行一个可以返回重复列名的Cypher命令。所以你不可能在实践中遇到这种情况,你可能很安全地创建一个包装函数。 –