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;