使用 OrientDB 的 'astar' 函数:在 Java 中调用 SQL
Using the 'astar' function of OrientDB: an SQL call in Java
我正在使用 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)
方法 returns OVertex 对象存在于数据库中,因此我们可以识别 @rid
。显然,这种方法没有任何用处。
我的问题是在尝试调用数据库上的 astar
查询时出现的(即方法的第二行)。我收到以下错误: OCommandSQLParsingException: Error parsing query
到达第一个 (
(即遇到左括号时出错)。完全删除括号只会导致第一个 @rid
值前面的 #
发生相同的错误。
我似乎找不到任何在实践中使用此函数的示例,并且(至少我认为)我正在使用 the documentation 建议的函数调用。期待听到您的想法。
我使用的是最新版本的 OrientDB:3.2.3
原来错误与括号本身无关。将 "direction='OUT'"
和 "customHeuristicFormula='EUCLIDEAN'"
参数作为字符串的一部分传递是问题所在。下面的代码块成功了。
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...
}
我正在使用 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)
方法 returns OVertex 对象存在于数据库中,因此我们可以识别 @rid
。显然,这种方法没有任何用处。
我的问题是在尝试调用数据库上的 astar
查询时出现的(即方法的第二行)。我收到以下错误: OCommandSQLParsingException: Error parsing query
到达第一个 (
(即遇到左括号时出错)。完全删除括号只会导致第一个 @rid
值前面的 #
发生相同的错误。
我似乎找不到任何在实践中使用此函数的示例,并且(至少我认为)我正在使用 the documentation 建议的函数调用。期待听到您的想法。
我使用的是最新版本的 OrientDB:3.2.3
原来错误与括号本身无关。将 "direction='OUT'"
和 "customHeuristicFormula='EUCLIDEAN'"
参数作为字符串的一部分传递是问题所在。下面的代码块成功了。
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...
}