如何将 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 语句。
我正在尝试定义一个 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 语句。