web-dev-qa-db-ja.com

H2データベースを使用してストアドプロシージャを作成するにはどうすればよいですか?

H2データベースを使用してストアドプロシージャを作成しようとした人はいますか?

18
user351687

Java関数内でデータベースにアクセスするには、接続が必要です。H2の場合、このような接続を取得するには2つの方法があります。

解決策1:Java関数の最初のパラメーターが_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")を使用してJava関数内で新しい接続を開くことができます。この機能はH2バージョン1.3.151以降で使用可能であり、デフォルトで無効になっています。有効にするには、_;DEFAULT_CONNECTION=TRUE_ データベースURLに を追加します。これは問題のある機能です。 JDBCドライバーは、H2ドライバーの前にロードされた場合、このデータベースURLを解決しようとします。したがって、基本的に、Oracleドライバーがロードされている場合、この機能は使用できません(これはOracleドライバーのバグだと思います)。

9
Thomas Mueller