Как передать параметры в запрос APOC в Neo4j - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь запросить записи (между определенными периодами) из базы данных SQL с помощью библиотеки APOC.Когда я передаю даты от и до в качестве параметров, я получаю сообщение об ошибке.

Код:

String queryString ="CALL apoc.load.jdbc('mssql',\"select * from table as tb where tb.from_Date >= {fromDate} AND tb.to_Date <= {endDate} \") YIELD row";

String fromDate = "2018-11-12 00:00:00";
String endDate = "2018-11-13 00:00:00";
Map<String, Object> parameters = new HashMap<>();
parameters.put("fromDate", fromDate);
parameters.put("endDate", endDate);

StatementResult result = tx.run(queryString, parameters);

Я получаю ошибки ниже:

Если я использую синтаксис {}

Neo.ClientError.Procedure.ProcedureCallFailed: Failed to invoke procedure 
`apoc.load.jdbc`: Caused by: 
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '{'.

Если я использую синтаксис $

Neo.ClientError.Procedure.ProcedureCallFailed: Failed to invoke procedure 
`apoc.load.jdbc`: Caused by: 
com.microsoft.sqlserver.jdbc.SQLServerException: Invalid pseudocolumn "$fromDate".

1 Ответ

0 голосов
/ 28 ноября 2018

В вашей версии заполнители параметров являются лишь частью строки запроса, и их значения не передаются.

Поэтому используйте процедуру apoc.load.jdbcParams, например:

String query = "CALL apoc.load.jdbc('mssql', {sql}, [{fromDate}, {endDate}]) YIELD row return row";
String sql = "select * from table as tb where tb.from_Date >= ? AND tb.to_Date <= ?";
String fromDate = "2018-11-12 00:00:00";
String endDate = "2018-11-13 00:00:00";

Map<String, Object> parameters = new HashMap<>();
parameters.put("sql", sql);
parameters.put("fromDate", fromDate);
parameters.put("endDate", endDate);

StatementResult result = tx.run(query, parameters);
...