18

有没有人尝试使用 H2 数据库创建存储过程?

4

1 回答 1

9

要在 Java 函数中访问数据库,您确实需要一个连接。对于 H2,有两种方法可以得到这样的连接:

解决方案1:如果Java函数的第一个参数是a java.sql.Connection,那么数据库提供连接。对于 SQL,这是一个“隐藏”参数,这意味着您不能也不需要显式设置它。这已记录在案:用户定义的函数和存储过程,“需要连接的函数”。例子:

CREATE ALIAS QUERY AS $$
ResultSet query(Connection conn, String sql) throws SQLException {
    return conn.createStatement().executeQuery(sql);
} $$;
CALL QUERY('SELECT * FROM DUAL');

解决方案 2:为了与 Apache Derby 和 Oracle 兼容,您可以使用DriverManager.getConnection("jdbc:default:connection"). 此功能在 H2 版本 1.3.151 及更高版本中可用,默认情况下已禁用。要启用它,请附加;DEFAULT_CONNECTION=TRUE 到数据库 URL。这是一个有问题的功能,因为如果在 H2 驱动程序之前加载,Oracle JDBC 驱动程序将尝试解析此数据库 URL。因此,如果加载了 Oracle 驱动程序,基本上您将无法使用该功能(我认为这是 Oracle 驱动程序中的错误)。

于 2011-03-20T14:41:09.560 回答