如何将 java 定义的存储过程定义为 return 多个结果集?

How do I define a java defined stored proc to return multiple result sets?

我正在尝试定义一个 java(用 Kotlin 编写)方法,该方法在作为存储过程调用时 returns 多个结果集。代码如下。 Hsqldb 网站;功​​能页面表明这应该是可能的,我错过了什么?我目前在索引 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,如果有更好的解决方案我愿意接受。

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 语言过程 return 多个结果集。

出于测试目的,您可以使用一个文本模板,该模板由 SQL/PSM CREATE PROCEDURE 语句组成,用 SQL 编写,占位符用于您实际 SQL 语句想要执行。使用文件中的测试 SQL 语句处理模板并执行生成的 CREATE PROCEDURE 语句。