#java #sql #orientdb #graph-databases #a-star
#java #sql #orientdb #графические базы данных #a-star
Вопрос:
Я использую OrientDB для представления карт больших городов и вычисления кратчайшего времени прохождения между парой узлов, когда возникает необходимость. У меня есть следующий метод:
public void getShortestPath(int from, int to){
String query = "SELECT astar(?, ?, time, direction=OUT, customHeuristicFormula=EUCLIDEAN) FROM V";
OResultSet set = db.query(query, getNode(from).getProperty("@rid"), getNode(to).getProperty("@rid"));
}
getNode(nodeID)
Метод возвращает объект OVertex, присутствующий в базе данных, следовательно, мы можем идентифицировать @rid
. Очевидно, что этот метод не имеет смысла как есть.
Моя проблема возникает при попытке вызвать astar
запрос к базе данных (т. Е. Вторая строка метода). Я получаю следующую ошибку: OCommandSQLParsingException: Error parsing query
при достижении первой (
(т. Е. Ошибка, связанная с открытой скобкой). Полное удаление скобок просто привело к той же ошибке, возникающей #
перед первым @rid
значением.
Кажется, я не могу найти ни одного примера использования этой функции на практике, и (по крайней мере, я думаю) я использую вызов функции, как это предложено в документации. С нетерпением ждем ваших мыслей.
Я использую самую последнюю версию OrientDB: 3.2.3
Ответ №1:
Оказывается, ошибка не имеет ничего общего с самой скобкой. "direction='OUT'"
"customHeuristicFormula='EUCLIDEAN'"
Проблема заключалась в передаче параметров and как части строки. Приведенный ниже блок сделал свое дело.
String sql = "SELECT ASTAR(" getNode(from).getProperty("@rid") ", " getNode(to).getProperty("@rid") ", time) FROM V";
try(OResultSet set = db.query(sql, "direction='OUT'", "customHeuristicFormula='EUCLIDEAN'")) {
// some code...
}