【发布时间】:2016-04-08 20:05:50
【问题描述】:
我有兴趣在 Java 代码中参数化 Gremlin 查询,就像我们在使用 PreparedStatement 进行 SQL 查询时所做的一样(例如:statement.setString(int, String), statement.setInt(int, int))。
请告诉我,我们能否在 Java 中为 Gremlin 查询做这种事情。
提前致谢。
问候, 卡马尔
【问题讨论】:
我有兴趣在 Java 代码中参数化 Gremlin 查询,就像我们在使用 PreparedStatement 进行 SQL 查询时所做的一样(例如:statement.setString(int, String), statement.setInt(int, int))。
请告诉我,我们能否在 Java 中为 Gremlin 查询做这种事情。
提前致谢。
问候, 卡马尔
【问题讨论】:
对于那些在此处寻找 Titan 1.x 和 TinkerPop 3.x 答案的人:
gremlin> cluster = Cluster.open()
==>localhost/127.0.0.1:8182
gremlin> client = cluster.connect()
==>org.apache.tinkerpop.gremlin.driver.Client$ClusteredClient@412c995d
gremlin> client.submit("g.V(start).valueMap(m)",[start:1L, m:(['name','age'] as String[])]).all().get()
==>result{object={name=[marko], age=[29]} class=java.util.HashMap}
【讨论】:
在https://github.com/tinkerpop/rexster/wiki/RexPro-Java查看此内容
如果可能,请参数化 Gremlin 脚本,因为这会带来更好的整体性能。上面的例子可以作为参数化请求来完成,如下所示:
RexsterClient client = RexsterClientFactory.open("localhost", "tinkergraph");
List<Map<String, Object>> results = client.execute("g.v(start).map",
new HashMap<String, Object>(){{
put("start", 1);
}});
Map<String, Object> map = results.get(0);
System.out.println(map.get("name"));
阿克沙耶
【讨论】:
List 作为参数传递,但我认为您必须在脚本中手动将其转换为数组以调用map()。我有一种感觉,传递 String 数组只会将其转换为 List 所以无论哪种方式你都必须进行转换(但也许值得一试)。