Java通过TigerGraph JDBC驱动执行Select查询顶点数据报错问题
问题描述
在Java环境中使用TigerGraph JDBC驱动执行Select语句查询顶点数据时,抛出java.sql.SQLException: Unsupported dbtable: InfectionCase异常,需确认两个核心问题:
- TigerGraph JDBC是否原生支持Select语句
- 执行Select查询的其他可行方式
复现代码与异常信息
业务代码片段:
try (Connection con = getConnection()) { String query = "select * From InfectionCase where id == \"Hansarang Convalescent Hospital\""; System.out.println("Running :" + query); Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery(query); System.out.println(rs.toString()); do { java.sql.ResultSetMetaData metaData = rs.getMetaData(); System.out.println("Table: " + metaData.getCatalogName(1)); System.out.print(metaData.getColumnName(1)); for (int i = 2; i <= metaData.getColumnCount(); ++i) { System.out.print("\t" + metaData.getColumnName(i)); }
抛出的异常栈:
java.sql.SQLException: Unsupported dbtable: InfectionCase at com.tigergraph.jdbc.restpp.driver.QueryParser.<init>(QueryParser.java:629) at com.tigergraph.jdbc.restpp.RestppStatement.execute(RestppStatement.java:41) at com.tigergraph.jdbc.restpp.RestppStatement.executeQuery(RestppStatement.java:35) at com.prissoft.connection.GraphJSON.selectStatementUsingSQL(GraphJSON.java:145) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)
问题原因
基于RESTPP接口的旧版本TigerGraph JDBC驱动,默认不支持无图上下文的标准SELECT语句直接查询顶点。驱动解析SQL时如果没有获取到当前操作的图名,就无法将SQL中的表名(即示例中的顶点类型InfectionCase)和图Schema中的顶点做映射,直接抛出Unsupported dbtable异常。
另外示例SQL中相等判断用了==,不符合标准SQL语法,也可能触发解析异常。
可行解决方案
- 补全JDBC连接的图名配置
JDBC连接URL必须指定graph参数,明确当前操作的图,驱动才能正确识别顶点/边类型,参考URL格式:
同时修正SQL语法,把相等判断的jdbc:tg:http://<TigerGraph服务IP>:14240?graph=<你的图名>&username=<用户名>&password=<密码>==改成=,字符串用单引号包裹,修正后语句:
配置正确后,新版本驱动可直接执行该语句返回结果。SELECT * FROM InfectionCase WHERE id = 'Hansarang Convalescent Hospital' - 调用预安装的GSQL自定义查询
如果使用的是老版本驱动,可先在TigerGraph中编写并安装对应查询逻辑的GSQL语句,JDBC侧直接调用已安装的查询接口、传入参数即可获取结果,这种方式兼容性最好,适合复杂查询场景。 - 升级JDBC驱动到最新稳定版
最新版TigerGraph JDBC驱动已完整支持SQL++语法,对标准SELECT语句的兼容性更高,只要连接参数配置正确,不需要额外适配即可直接执行类SQL的图查询。
内容的提问来源于stack exchange,提问作者Rajvardhan Salunkhe
相关产品推荐
相关产品推荐

