2010-06-23 107 views
16

有沒有人試圖用H2數據庫創建存儲過程?如何使用H2數據庫創建存儲過程?

+0

我使用Java函數的問題與[this one]不同(http://stackoverflow.com/questions/3098905/how-to-create-stored-procedure-using-h2-database)。我不知道如何在這樣的函數中訪問表(創建連接在那裏沒有意義,是嗎?)? – maaartinus 2011-03-18 12:06:31

+0

查看手冊總是很有幫助:[H2:用戶定義的函數和存儲過程](http://www.h2database.com/html/features.html#user_defined_functions) – NullUserException 2010-10-07 03:52:48

回答

9

要訪問Java函數中的數據庫,您確實需要連接。對於H2,有兩種方法可以獲得此類連接:

解決方案1 ​​:如果Java函數的第一個參數是java.sql.Connection,則數據庫提供連接。對於SQL,這是一個'隱藏'參數,這意味着你不能也不需要明確設置它。記錄如下:User-Defined Functions and Stored Procedures,「需要連接的功能」。例如:

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和甲骨文的兼容性,您可以打開使用DriverManager.getConnection("jdbc:default:connection")的Java函數中的一個新的連接。此功能在H2版本1.3.151及更新的版本中可用,並且默認情況下它是禁用的。要啓用它,請附加;DEFAULT_CONNECTION=TRUEto the database URL。這是一個有問題的功能,因爲如果Oracle驅動程序在H2驅動程序之前加載,Oracle JDBC驅動程序將嘗試解析此數據庫URL。因此,如果加載Oracle驅動程序,基本上不能使用該功能(我認爲這是Oracle驅動程序中的一個錯誤)。

+0

當你完成它們時總是關閉你的語句...聲明s = conn.createStatement();嘗試{返回s.executeQuery(sql);}終於{s.close();} – jcalfee314 2013-08-05 19:20:51

+0

對於H2(這是關於H2),沒關係,如果你關閉該聲明與否。但是,一般來說,聲明應該被關閉。 – 2013-08-05 19:47:23

+0

@Thomas Mueller你的文檔例子很差,你會把一個CRUD例子 – Dunken 2016-03-29 10:47:50

相關問題