H2 データベースを使用してストアド プロシージャを作成しようとした人はいますか?
1 に答える
Java 関数内でデータベースにアクセスするには、接続が必要です。H2 の場合、このような接続を取得するには 2 つの方法があります。
解決策 1 : Java 関数の最初のパラメーターが の場合java.sql.Connection
、データベースが接続を提供します。SQL の場合、これは「隠し」パラメーターです。つまり、明示的に設定することはできませんし、その必要もありません。これは文書化されています: User-Defined Functions and Stored Procedures、「Functions That Require a Connection」。例:
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 との互換性のために、Java 関数内で を使用して新しい接続を開くことができますDriverManager.getConnection("jdbc:default:connection")
。この機能は H2 バージョン 1.3.151 以降で利用でき、デフォルトでは無効になっています。有効にするに;DEFAULT_CONNECTION=TRUE
は、データベース URL に追加します。H2 ドライバーの前にこのデータベース URL がロードされると、Oracle JDBC ドライバーがこのデータベース URL を解決しようとするため、これは問題のある機能です。したがって、基本的に、Oracle ドライバーがロードされている場合、この機能を使用することはできません (これは Oracle ドライバーのバグだと思います)。