如何定义 java 定义的存储过程以返回多个结果集?
Posted
技术标签:
【中文标题】如何定义 java 定义的存储过程以返回多个结果集?【英文标题】:How do I define a java defined stored proc to return multiple result sets? 【发布时间】:2020-07-29 22:50:43 【问题描述】:我正在尝试定义一个 java(用 Kotlin 编写)方法,该方法在作为存储过程调用时返回多个结果集。代码如下。 Hsqldb website;s features page表明这应该是可能的,我错过了什么?我目前在索引 1 上遇到数组越界错误:
val createProcedure = """
CREATE PROCEDURE GET_CACHED(dir VARCHAR(100), hashCode INT)
MODIFIES SQL DATA
LANGUAGE JAVA
DYNAMIC RESULT SETS 9
EXTERNAL NAME 'CLASSPATH:integration.FileCache.getResultSets'
"""
@JvmStatic
@Throws(SQLException::class)
public fun getResultSets(conn: Connection, dir: String, hashCode: Int, result: Array<ResultSet?>)
val file = getFile(dir, hashCode, "sql")
//A list of cached sql statements
val sqlList = BufferedReader(InputStreamReader(file.inputStream())).readLines()
val stmt = conn.createStatement()
for(i in sqlList.indices)
result[i] = stmt.executeQuery(sqlList[i])
鉴于我可以设置断点并到达函数内部,我认为我不需要再添加任何代码,但如果有错误请告诉我。
我正在寻找一个可以处理多个结果集以用于测试目的的内存数据库(我们正在对应用程序进行现代化改造,首先设置测试,容器化测试目前遥不可及)。我已经尝试过 H2、sqlite 和现在的 hsqldb,如果有更好的解决方案我愿意接受。
【问题讨论】:
【参考方案1】:HSQLDB 支持多结果测试,但指南指出:HyperSQL support this method of returning single or multiple result sets from SQL/PSM procedures only via the JDBC CallableStatement interface.
注意引用 SQL/PSM,而不是 SQL/JRT。目前没有 Java 机制可以从 Java 语言 PROCEDURE 返回多个结果集。
出于测试目的,您可以使用由用 SQL 编写的 SQL/PSM CREATE PROCEDURE
语句组成的文本模板,其中包含您要执行的实际 SQL 语句的占位符。使用文件中的测试 SQL 语句处理模板并执行生成的 CREATE PROCEDURE 语句。
【讨论】:
以上是关于如何定义 java 定义的存储过程以返回多个结果集?的主要内容,如果未能解决你的问题,请参考以下文章