使用 Spring Boot 和 HSQLDB 模拟存储过程
Mock Stored procedures with Spring Boot and HSQLDB
我正在开发一个 Spring 启动项目,使用 HSQLDB 作为我的测试的内存数据库。
我决定在 h2 上使用 HSQLDB 的原因是我的数据源很旧并且包含很多 H2 无法处理的具有多个 OUT 参数的查询
虽然我能够 运行 在 HSQL 上使用带有多个 OUT 参数的 JPA 查询,但我现在需要模拟一些存储过程。
在 H2 中是可能的,例如你可以看到 here。是否可以在 HSQLDB 上模拟存储过程?到目前为止,我只能找到一些非常古老的文章(2011 年),而在 HSQLDB 文档本身中什么也找不到。
HSQLDB 支持带有 OUT 参数的存储过程。您可以在SQL 或Java 中编写程序。以下文档中的示例:
CREATE PROCEDURE new_customer(OUT newid INT, IN firstname VARCHAR(50), IN lastname VARCHAR(50), IN address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE temp_id INTEGER;
INSERT INTO CUSTOMERS VALUES (DEFAULT, firstname, lastname, CURRENT_TIMESTAMP);
SET temp_id = IDENTITY();
INSERT INTO ADDRESSES VALUES (DEFAULT, temp_id, address);
SET newid = temp_id;
END
你可以在指南中找到上面的例子,以及用Java写的例子。 http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html
在@fredt 提供的文档 url 中,我发现 this example 适合我:
CREATE PROCEDURE get_customer(IN id INT, OUT firstname VARCHAR(50), OUT lastname VARCHAR(50))
READS SQL DATA
LANGUAGE JAVA
EXTERNAL NAME 'CLASSPATH:org.hsqldb.test.Test01.getCustomerProcedure'
public static void getCustomerProcedure(int id, String[] firstn, String[] lastn) throws java.sql.SQLException {
firstn[0] = somevalue; // parameter out value is assigned
lastn[0] = somevalue; // parameter out value is assigned
}
我正在开发一个 Spring 启动项目,使用 HSQLDB 作为我的测试的内存数据库。 我决定在 h2 上使用 HSQLDB 的原因是我的数据源很旧并且包含很多 H2 无法处理的具有多个 OUT 参数的查询
虽然我能够 运行 在 HSQL 上使用带有多个 OUT 参数的 JPA 查询,但我现在需要模拟一些存储过程。
在 H2 中是可能的,例如你可以看到 here。是否可以在 HSQLDB 上模拟存储过程?到目前为止,我只能找到一些非常古老的文章(2011 年),而在 HSQLDB 文档本身中什么也找不到。
HSQLDB 支持带有 OUT 参数的存储过程。您可以在SQL 或Java 中编写程序。以下文档中的示例:
CREATE PROCEDURE new_customer(OUT newid INT, IN firstname VARCHAR(50), IN lastname VARCHAR(50), IN address VARCHAR(100))
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE temp_id INTEGER;
INSERT INTO CUSTOMERS VALUES (DEFAULT, firstname, lastname, CURRENT_TIMESTAMP);
SET temp_id = IDENTITY();
INSERT INTO ADDRESSES VALUES (DEFAULT, temp_id, address);
SET newid = temp_id;
END
你可以在指南中找到上面的例子,以及用Java写的例子。 http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html
在@fredt 提供的文档 url 中,我发现 this example 适合我:
CREATE PROCEDURE get_customer(IN id INT, OUT firstname VARCHAR(50), OUT lastname VARCHAR(50))
READS SQL DATA
LANGUAGE JAVA
EXTERNAL NAME 'CLASSPATH:org.hsqldb.test.Test01.getCustomerProcedure'
public static void getCustomerProcedure(int id, String[] firstn, String[] lastn) throws java.sql.SQLException {
firstn[0] = somevalue; // parameter out value is assigned
lastn[0] = somevalue; // parameter out value is assigned
}