GBase 8s
其他
问答

shardingwhere联合gbase报错 只能调用一次方法。

发表于2024-09-24 14:14:16133次浏览7个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:

【操作系统】:

【CPU】:

【问题描述】*:

Caused by: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:67)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2322)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2075)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037)
    at org.hibernate.loader.Loader.doQuery(Loader.java:956)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357)
    at org.hibernate.loader.Loader.doList(Loader.java:2868)
    at org.hibernate.loader.Loader.doList(Loader.java:2850)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682)
    at org.hibernate.loader.Loader.list(Loader.java:2677)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:540)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:218)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1459)
    at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1649)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617)
    at org.hibernate.query.Query.getResultList(Query.java:165)
    at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:76)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:427)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:88)
    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)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke

Caused by: java.sql.SQLException: 只能调用一次方法。
    at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
    at com.gbasedbt.jdbc.IfxStatement.chkAndSetGetRsltCalledFlag(IfxStatement.java:1846)
    at com.gbasedbt.jdbc.IfxStatement.getResultSet(IfxStatement.java:1019)
    at com.zaxxer.hikari.pool.ProxyStatement.getResultSet(ProxyStatement.java:213)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.getResultSet(HikariProxyPreparedStatement.java)
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.getResultSets(ShardingSpherePreparedStatement.java:534)
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.executeQuery(ShardingSpherePreparedStatement.java:249)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
    ... 210 common frames omitted

数据库配置是这样

评论

登录后才可以发表评论
用户头像
路路路发表于 1年前
安装的数据库是GBase8sV8.8_3.5.1_3
GBase用户10603发表于 1年前
用户头像
琳大大发表于 1年前
是不是ResultSet方法重复调用了
GBase用户10603发表于 1年前
@琳大大: while(var2.hasNext()) {
Statement each = (Statement)var2.next();
if (null != each.getResultSet()) {
result.add(each.getResultSet());
}
} 代码有一段是这样的
用户头像
琳大大发表于 1年前
@GBase用户10603:要不试一下我们这边sharding之前适配过的包,有5.1.0和5.4.1
ivan发表于 1年前
@琳大大:这个问题的本质是sharding重复调用了Statement.getResultSet,原则上该接口应该只被调用一次,如果存在多结果集,需要确保上一个获取的Result被关闭后再次调用。
针对这个点可以简单修改下shardingsphere为如下:
Statement each = (Statement)var2.next();
ResultSet rs = each.getResultSet();
if (null !=rs) {
result.add(rs);
}
}

建议使用我们已经适配好的相近版本进行功能测试
最佳回答
用户头像
GBase用户28017发表于 7个月前
不能吧。