我想实现使用 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 连接失败时,通过更改端口解决了这个问题,所以也不确定。