H2 数据库中的存储过程

2022-09-03 05:29:58

我是数据库新手,最近开始为H2数据库编写测试用例。我想知道如何在 Eclipse 中测试存储过程。我看到了以下内容:

http://www.h2database.com/html/features.html#user_defined_functions

如何在 H2 中创建过程

h2数据库链接中给出的示例代码,

"CREATE ALIAS NEXT_PRIME AS $$
String nextPrime(String value) {
    return new BigInteger(value).nextProbablePrime().toString();
}
$$;
" 
  • 这应该在哪里声明?以及如何运行它?

PS - 我有H2 JAR文件,正在测试它。

如果有人能告诉我如何用Java为H2编写一个简单的存储过程,那将有很大的帮助。

此外,H2中是否存在以下等效项?

“开始dbms_output”?

谢谢。


答案 1

H2数据库中没有存储过程和sql用户定义的函数,相反,我们使用java方法并创建一个别名来引用它。我们可以使用别名调用该方法。

下面是一个简单的示例:**

DROP ALIAS IF EXISTS MYFUNCTION;
CREATE ALIAS MYFUNCTION AS $$
String getTableContent(java.sql.Connection con) throws Exception {
    String resultValue=null;
    java.sql.ResultSet rs = con.createStatement().executeQuery(
    " SELECT * FROM TABLE_NAME");
       while(rs.next())
       {
        resultValue=rs.getString(1);
       }
    return resultValue;
}
$$;

答案 2

您可能忽略了 中的示例。下面是一个相关示例:src/test/org/h2/samples/Function.java

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Statement st = conn.createStatement();
st.execute("CREATE ALIAS getVersion FOR \"org.h2.engine.Constants.getVersion\"");
ResultSet rs;
rs = st.executeQuery("CALL getVersion()");
if (rs.next()) System.out.println("Version: " + rs.getString(1));

安慰:Version: 1.4.191

附录:该功能不仅限于功能;别名方法可以执行任意 Java 代码。例如,函数.java 中定义的方法可能被别名并调用,如下所示:query()

Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Statement st = conn.createStatement();
st.execute("CREATE ALIAS query FOR \"cli.Function.query\"");
rs = st.executeQuery("CALL query('SELECT NAME FROM INFORMATION_SCHEMA.USERS')");
while (rs.next()) {
    System.out.println("User: " + rs.getString(1));
}

安慰:User: SA

请注意,这是 的副本。cli.Function.queryorg.h2.samples.Function.query


推荐