1

我想实现使用 C++ 连接到 neo4j 数据库的基本任务。
为此,我得到了 libneo4j-client 并从https://neo4j-client.net/复制了代码。编译工作正常。

现在我执行了以下代码:

neo4j_client_init();

neo4j_connection_t* connection = neo4j_connect("neo4j://user:pass@localhost:7687", NULL, NEO4J_INSECURE);
assert(connection);

这导致断言停止执行,因为连接是NULL
请注意,我当然输入了实际的用户名和密码。

我确保服务器确实存在。在浏览器中打开 localhost:7474 会打开预期的浏览器界面,接受用户名和密码,并指出 7687 是一个有效端口。
同样,使用访问数据库cypher-shell也可以正常工作。

在我看来,neo4j://localhost:7687 应该是正确的地址。

我尝试了几种变体,比如省略 neo4j:// 协议标识符,尝试用 bolt、http 和 https 标识符替换它,尝试 7474 作为端口,所有这些组合。

然后我尝试使用库的日志记录功能获取一些诊断数据:

FILE* log_file = fopen("log.dat" , "w");
neo4j_logger_provider* logger = neo4j_std_logger_provider(log_file, 1, 0);
neo4j_config_t* config = neo4j_new_config();
neo4j_config_set_username(config, "username");
neo4j_config_set_password(config, "password");
neo4j_config_set_logger_provider(config, logger);

neo4j_connection_t* connection = neo4j_connect("neo4j://localhost:7687", config, NEO4J_INSECURE);
assert(connection);

由于调用fopen,log.dat被创建,但就是这样,之后文件为空,断言失败。

在这一点上,我不知道还能尝试什么或如何进行任何类型的诊断。同样,我的目标是一般地连接数据库,我并没有特别绑定到 libneo4j-client。但是,我想编写一个无需进一步安装即可在新系统上运行的程序,因此我不能system()用来调用cyper-shell必须安装的东西。加上以后,会有很多数据流,所以我希望连接尽可能直接。有人比我聪明吗?

我不确定的一件事是libneo4j-client数据库的版本兼容性和版本。
我还发现了四年前的问题Using Neo4j database from C++并且我将开始阅读 cyper API,但我希望它能够与libneo4j-client.
编辑:根据https://neo4j.com/developer/c/libneo4j-client实际上是 C++ 使用的默认值,并且没有列出任何替代方案。

编辑:neo4j-client本身似乎也不起作用:

$ neo4j-client -u neo4j localhost
error: A secure connection could not be esablished (try --insecure)
$ neo4j-client -u neo4j localhost --insecure
error: Could not agree on a protocol version
$ neo4j-client -u neo4j neo4j://localhost:7687
error: A secure connection could not be esablished (try --insecure)
$ neo4j-client -u neo4j neo4j://localhost:7687 --insecure
error: Could not agree on a protocol version

这是否意味着不兼容?neo4j-client使用的不是服务器使用的协议吗?

OS X yosemite 上与 neo4j-client 连接失败时,通过更改端口解决了这个问题,所以也不确定。

4

1 回答 1

1

通过降级 Neo4J 的版本解决了这个问题。

版本 4.0.1 使用更高版本的螺栓协议,目前尚未记录,因此neo4j-client.
版本 3.5 使用旧协议(螺栓版本 1),因此是兼容的。

于 2020-03-06T11:08:51.513 回答