Я хочу выполнить основную задачу c подключения к базе данных neo4j с использованием C ++.
Для этого я получил 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);
Это приводит к тому, что assert останавливает выполнение, так как соединение NULL
.
Обратите внимание, что, конечно, я ввел действительное имя пользователя и пароль.
Я убедился, что сервер действительно существует. Открытие localhost: 7474 в браузере открывает ожидаемый интерфейс браузера, принимает имя пользователя и пароль и упоминает, что 7687 является допустимым портом.
Аналогично, доступ к базе данных с использованием cypher-shell
также работает нормально.
Насколько я понимаю, neo4j: // localhost: 7687 должен быть правильным адресом.
Я опробовал несколько вариантов этого, например, опуская идентификатор протокола neo4j: //, пытаясь заменить это с идентификаторами bolt, http и https, пробуя 7474 как порт, все комбинации этого.
Затем я попытался получить некоторые данные диагностики c, используя возможности журналирования библиотеки:
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-клиентом в частности. Тем не менее, я хочу написать программу, которая может работать в новой системе без дальнейшей установки, поэтому я не могу использовать system()
для вызова чего-то вроде cyper-shell
, который должен быть установлен. Кроме того, позже будет большой поток данных, поэтому я хочу, чтобы соединение было максимально прямым. Кто-нибудь мудрее меня?
Одна вещь, в которой я не уверен, это совместимость версий libneo4j-client
и версии базы данных.
Я также нашел четырехлетний вопрос Использование базы данных Neo4j из 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
использует не сервер, который использует?
В Не удалось установить соединение с neo4j-клиентом в OS X yosemite , это было решено путем изменения порта, однако, так что не уверен в этом тоже.