gpt4 book ai didi

java - mysql 存储过程与 hsqldb 存储过程

转载 作者:行者123 更新时间:2023-11-29 11:42:11 25 4
gpt4 key购买 nike

我在mysql中有以下存储过程

DELIMITER $$
CREATE DEFINER=`user`@`%` PROCEDURE `sp_getJobs`()
BEGIN
SELECT * FROM jobs_table;
END$$
DELIMITER ;

以及 hsqldb 中定义的以下内容(用于单元测试)

CREATE PROCEDURE sp_getJobs() READS SQL DATA
DYNAMIC RESULT SETS 1
BEGIN ATOMIC
DECLARE result CURSOR WITH RETURN FOR SELECT * FROM jobs_table FOR READ ONLY;
OPEN result;
END

执行存储过程的Spring框架代码

query = "Call sp_getJobs"; //This is used when MySql is database
query = "Call sp_getJobs()"; //This is used when HsqlDb is used in testing
getJdbcTemplate().query(query, rs -> {
process(rs);
return null;
});

private void process(ResultSet rs) {
while (rs.next()) {
//do something
}
}

执行 mysql 的 spring 代码工作正常,但是,当我对 hsqldb 执行相同的代码时,我得到一个空结果集(rs.next() 返回 false)。

注意 - 我用于测试的 createdata.sql 文件创建了 jobs_table 并用 6 行数据填充它。所以表应该有数据。

最佳答案

Spring 代码看起来不适合 HSQLDB 过程。它可能适用于返回表的函数。

将过程更改为 FUNCTION 并返回包含数据的表。

或者,使用该过程,但在调用它之后,在 process(ResultSet rs) 调用之前执行 getMoreResults()。

关于java - mysql 存储过程与 hsqldb 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com