1. 程式人生 > >H2Database 簡要介紹及內嵌應用

H2Database 簡要介紹及內嵌應用

#H2Database 簡要介紹及應用
##簡要介紹
h2是一個開源的純java編寫的輕量級資料庫,是一個用Java開發的嵌入式資料庫,只有一個jar檔案,
可以直接嵌入到應用專案中。

h2最大的用途在於可以同應用程式打包在一起釋出,這樣可以非常方便地儲存少量結構化資料,它的另一個用途是用於單元測試。

h2啟動速度快,而且可以關閉持久化功能,每一個用例執行完隨即還原到初始狀態。h2的第三個用處是作為快取,作為NoSQL的一個補充。

h2的資料庫服務,可通過安裝服務端軟體(windows和linux均支援)來提供資料庫服務,單也可以直接通過h2.jar包直接通過java程式碼
建立服務,從而提供相應的資料庫服務。通常使用h2.jar包形式來提供服務,一般都是便於用作嵌入式資料庫服務時使用。如果作為普通
的資料庫服務,通常都是安裝服務端軟體。

  • 主要特徵

  •   • 超快的資料庫引擎 
      • 開源 
      • 純JAVA編寫 
      • 支援標準SQL和JDBC 
      • 支援內嵌模式、伺服器模式和叢集 
      • 高強度的安全保障 
      • 支援PostgreSQL的ODBC驅動 
      • 多種併發機制
    
  • 其他特徵

  •   • 支援磁碟和記憶體資料庫,支援只讀資料庫,支援臨時表 
      • 支援事務(讀提交和序列化事務隔離),支援2階段提交 
      • 支援多連線,支援表級鎖 
      • 使用基於成本的優化機制,對於複雜查詢使用零遺傳演算法進行管理 
      • 支援可滑動可更新的結果集,支援大型結果集、支援結果集排序,支援方法返回結果集 
      • 支援資料庫加密(使用AES或XTEA進行加密),支援SHA-256密碼加密,提供加密函式,支援SSL
    

##H2服務模式
也就是遠端連線模式,這種模式與其他資料庫使用方式基本一致。

這種模式當然前提是要先啟動H2伺服器,這樣客戶端才能連線並執行SQL指令碼。

這種模式是要比內嵌模式慢的,因為資料傳輸使用TCP/IP協議。

  • 該模式的資料庫URL設定有兩種:
  • Server mode (remote connections) using TCP/IP:
  •   jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
      jdbc:h2:tcp://localhost/~/test
      jdbc:h2:tcp://dbserv:8084/~/sample
      jdbc:h2:tcp://localhost/mem:test 
    
  • Server mode (remote connections) using TLS:
  •   jdbc:h2:ssl://<server>[:<port>]/[<path>]<databaseName>
      jdbc:h2:ssl://localhost:8085/~/sample; 
    

##H2純記憶體模式

當連線記憶體資料庫的所有連線關閉之後,資料就會被清空。

為了維持資料,在URL後配置DB_CLOSE_DELAY=-1,會讓它的生命週期同JVM一致。

  • 記憶體模式的資料庫URL:
  •   jdbc:h2:mem:
      jdbc:h2:mem:<databaseName>
      jdbc:h2:mem:test_mem
      jdbc:h2:tcp://localhost/mem:db1
    

##H2嵌入模式
這種連線方式預設情況下只允許有一個客戶端連線到H2資料庫,有客戶端連線到H2資料庫之後,此時資料庫檔案就會被鎖定,
那麼其他客戶端就無法再連線了。使用嵌入模式,不需要先啟動h2的伺服器,直接執行客戶端即可。

然而實際應用場景,應該讓多個客戶端訪問,比如WEB端檢視資料,而不是針對單一客戶端連線而進行資料庫檔案加鎖。
為了多執行緒操作資料庫,提高效能,在URL之後配置***AUTO_SERVER=TRUE***

本地測試相對路徑建立檔案沒有成功!

  • 內嵌模式的資料庫URL:
  •   jdbc:h2:[file:][<path>]<databaseName>
      jdbc:h2:~/test
      jdbc:h2:file:/data/sample
      jdbc:h2:file:C:/data/sample (Windows only)  
    

##內嵌模式實際應用
###下載
H2Database 下載獨立於平臺的版本Platform-Independent Zip
###解壓
例:D:\DOWNLOADS\h2-2018-03-18\h2\bin
BIN 目錄下有兩個DOS下的批處理檔案分別是h2.bat 和 h2w.bat
前者是使用命令列操作,後者有web頁面進行操作,簡單高效。

  • 登入選項例子如下設定:
  •   Driver Class:org.h2.Driver
      JDBC URL:jdbc:h2:file:C:/Users/Administrator/AppData/Local/Temp/h2/tickdata;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
      User Name:
      Password:
    

設定完之後點選Test Connection即可。建立成功便可登入。

###語法部分
例:SELECT :point AS POINT, :prtview AS PRTVIEW, :date AS DATE, :value AS VALUE FROM DUAL;

使用ELSQL(或者PreparedStatement) 設定變數時,H2的SELECT語法解析器 不能識別 已取別名如POINT等的型別的。

  • 目前的這種解決方案—設定區域性變數:
  •   SET @POINT = point; SET @PRTVIEW = prtview;
      SELECT @POINT AS POINT, @PRTVIEW AS PRTVIEW, @DATE AS DATE, @VALUE AS VALUE FROM DUAL;