Closed PolarBears-DontEat-IceCream closed 2 years ago
不是很理解,可以描述地更详细一些吗?
您好,抱歉描述得不太清晰。我这边需求是调用两次statement.executequery获取不同的属性和数据。语句如下: String querySql = "match (n:intelligent_device_category) return n.code as code,n.name as name;"; ResultSet resultSet = statement.executeQuery(querySql);
String querySql = "go from '" + vid + "' over has_scene yield $$.scene.name as name ,$$.scene.description as description,$$.scene.demand as demand,$$.scene.support_model as support_model;"; ResultSet resultSet = statement.executeQuery(querySql);
获取到的resultset里是对的,但是封装的nebularesultset只要调用一次之后就会一直保存之前的columnnames等信息,导致第二次查询语言的是四个属性,返回来的还是code和name,实际里面的数据是对的。查看了nebulaResultSetMetaData里getInstance里,如果nebuaresultsetmetadata为空才会重新用nebularesultset进行生成操作,但是此变量为静态,在重复调用是一直不为空的,写着有release方法,但是没有对外暴露出来。查看了jdbc的resultset实体,顺序调用statement是会隐式关闭之前的resultset。麻烦查看下问题,谢谢。
NebulaResultSetMetaData.release()
可以调用呀。不知道是不是我没理解你的意思,我尝试了在 statement 执行另一条查询之前调用 release,获得的 ResultSet 和 ResultSetMetaData 都是正确的。
抱歉,是可以调用的,调用后的ResultSet是正确的.
同个Statement连续调用 nebulaResultSetMetaData获取到的为同一个,置空的方法没有暴露出来 /* If you want to get MetaData after ResultSet changes, the method below should be called. / public static void release(){ nebulaResultSetMetaData = null; }
By default, only one
ResultSet
object perStatement
object can be open at the same time. Therefore, if the reading of oneResultSet
object is interleaved with the reading of another, each must have been generated by differentStatement
objects. All execution methods in theStatement
interface implicitly close a currentResultSet
object of the statement if an open one exists. 能否参考Statement的隐式关闭,实现可以重复调用