H2
數據庫,是Java實現的內存數據庫。可使用它作為嵌入式內存數據庫,但就其特性還用更多值得應用在實際項目中的意義。之前的一篇Blog中已經描述過其使用方法及豐富的連接數據庫方式。
官方主頁:http://www.h2database.com/
此段文字只說明用戶如何自定義數據庫函數,以及在數據庫中注冊函數。如對你有幫助可繼續閱讀
首先來說明用戶自定義函數的場景,現在假設我們需要在H2數據庫中實現Oracle的“TO_DATE”函數,那么需要的過程是這樣的:(1) 使用Java實現自定義函數的方法。(2) 將Java的自定義函數注冊到H2數據庫中。
(1) 首先我們來實現這個函數:
TO_DATE函數的Code:
/**
*
*/
package com.seraph.bi.suite.support.h2; import java.text.SimpleDateFormat; import org.h2.tools.SimpleResultSet; ... ... /** * Description: Function for H2 database<br> * Origin Time: 2009-7-11 上午07:57:46<br> * * @author Seraph<br> * @email:seraph115@gmail.com<br> */ public class Function { /** * Method: TO_DATE function like Oracle's<br> * Origin Time: 2009-7-11 上午08:14:11<br> * * @author: Seraph<br> * @param source * @param format * @return * @throws ParseException */ public static java.sql.Date to_date(String source, String format) throws ParseException { // TODO: 'YYYY-MM-DD' ? Oracle format? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = sdf.parse(source); return new java.sql.Date(date.getTime()); } ... ... }
以上代碼段是TO_DATE的實現,但用戶自定義的函數需注意的是:類和方法必須是公共(Public)的,且方法需為靜態(static)的,如方法中使用了Connection對象需將其關閉。
(2) 將其注冊到數據庫中,須執行語句
CREATE ALIAS
CREATE ALIAS [IF NOT EXISTS] newFunctionAliasName [DETERMINISTIC] FOR classAndMethodName
本例須執行的語句為: CREATE ALIAS TO_DATE FOR "com.seraph.bi.suite.support.h2.Function.to_date";
這樣再執行類似語句,如:SELECT to_date('2009-1-21','YYYY-MM-DD') from Your_Table 函數TO_DATE即可被解析了。
完成以上的步驟你就可以使用自己定義的數據庫函數了。這樣將更方便於數據庫之間的切換,使用內存數據庫應用程序啟動輕快,體積小,適合於程序開發時的單元測試及集成測試,同時更適合於去客戶方演示。
備注:
1.如使用的是編譯類,需添加至jdbc驅動jar包中。
2.如使用的是源碼,可直接使用sql語句添加至庫中。例:
CREATE ALIAS IP_ADDRESS AS $$ import java.net.*; @CODE String ipAddress(String host) throws Exception { return InetAddress.getByName(host).getHostAddress(); } $$;
官方說明文檔:
User-Defined Functions and Stored Procedures
In addition to the built-in functions, this database supports user-defined Java functions. In this database, Java functions can be used as stored procedures as well. A function must be declared (registered) before it can be used. A function can be defined using source code, or as a reference to a compiled class that is available in the classpath. By default, the function aliases are stored in the current schema.
http://www.h2database.com/html/features.html#user_defined_functions
- Function.rar (996 Bytes)
- 下載次數: 102
- h2-1.2.125.jar (1.2 MB)
- 下載次數: 18
