H2數據庫用戶自定義函數方法及范例


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM