h2指南

爲何是h2

  1. 方便開發 h2數據庫能夠做爲一個嵌入式的數據庫使用,在開發環境種使用很是方便。不像mysql等數據庫須要專門啓動一個數據庫服務,並作相關配置。能夠大大減小開發時的環境配置成本。html

  2. 方便測試 h2數據庫能夠做爲單元測試種使用的數據庫。和第一點相似,利用h2數據的嵌入式的特色,在單元測試種使用該數據庫將大大的下降配置成本。java

  3. 方便部署 即便是在生產環境中,我也很是很是推薦使用h2。由於該數據庫真的是很是的輕便,很是有利於程序的發佈。過去若是使用mysql這種數據庫,在發佈前還須要先將mysql服務器開啓,並創建相關db。而使用h2,你幾乎能夠徹底忽略這些過程。程序發佈的過程,你只須要集中在將程序運行起來便可。mysql

  4. 性能不錯 h2在必定程度上,性能徹底不弱於mysql。若是你的程序的用戶不超過1w,那麼我以爲h2在性能上徹底能夠和mysql媲美。至於更大的數據量和用戶數是否可以知足需求,我也不知道。對於初創產品而言,我以爲h2在性能上絕對已經知足開發者的需求了。web

  5. 只須要不多的資源 目前若是在要服務器上運行起mysql服務,那麼內存就會佔據約500mb。若是你的服務器只有1g的內存,那麼隨着程序運行,mysql會佔據更多的資源,接着就會致使資源不夠使用,mysql服務被關閉。而使用h2就完成沒有這樣的問題。h2佔據的資源很是的少,幾乎不會被你察覺。sql

快速開始

h2和mysql很大的一個區別是,你不須要在鏈接數據庫以前建立數據庫。若是在鏈接數據庫時,h2發現沒有該數據庫,其會自動新建數據庫文件。所以最快體驗h2的方法,就是直接去鏈接一個h2數據庫就能夠了。下面舉個用h2 shell鏈接數據庫的例子。shell

step1

運行以下命令java -cp h2*.jar org.h2.tools.Shell,h2*.jar文件是h2的運行文件,你能夠在官網上下載到。數據庫

step2

根據提示輸入URL:jdbc:h2:mem:test服務器

step3

根據提示輸入Driver:org.h2.Driverapp

step4

根據提示輸入User:roottcp

step5

根據提示輸入Password:123456

step last

這個時候你已經成功的鏈接到了數據庫,並能夠經過SQL語句對數據庫進行操做了。在上面的步驟當中,你鏈接到了內存當中的test數據庫,雖然他開始不存在,可是h2自動幫你新建了該數據庫。除了在內存種存儲數據庫文件外,你也能夠在文件中存儲數據庫,你只須要把URL改爲jdbc:h2:~/test,其便會鏈接~/test路徑對應的數據庫。

什麼是h2 web console

h2 web console是一個GUI的數據庫管理工具,經過他你能夠很方便的管理你的數據庫。他的做用就至關於PhpMyAdmin。我通常會在開發環境開啓h2 web console。固然應用沒有後臺管理這樣的工具的話,我也會在生產環境開啓h2 web console

啓動h2 web console

運行java -cp h2*.jar org.h2.tools.Console命令變可啓動h2 web console。運行該命令後,在結果輸出種能夠看到h2 web console的訪問地址。h2*.jar文件是h2的運行文件,你能夠在官網上下載到。

遠程訪問 h2 web console

h2 web console默認是隻能在本地訪問的。也就是說若是你在遠程服務器上開啓了h2 web console那麼你是沒有辦法在本身的電腦上訪問h2 web console的。爲了能在遠程訪問h2 web console,就須要開啓h2 web console的遠程訪問功能。

運行以下命令 java -cp h2*.jar org.h2.tools.Console -webAllowOthers。使用該命令打開的h2 web console就能夠在遠程訪問。h2*.jar文件是h2的運行文件,你能夠在官網上下載到。

h2 shell模式

h2的shell模式,你能夠理解爲是h2的命令行。你在該模式下能夠經過各類命令行和SQL語句對數據庫進行操做。

運行以下命令java -cp h2*.jar org.h2.tools.Shell,便打開了h2的shell模式。運行該命令後你還須要根據提示輸入DRIVER CLASSURLUSER NAMEPASSWORDh2*.jar文件是h2的運行文件,你能夠在官網上下載到。

h2的鏈接模式

h2有三種運行模式,分別是Embedded ModeServer ModeMixed Mode

Embedded Mode

  • 嵌入模式:在該模式下,程序會直接鏈接數據庫,訪問數據庫文件。該模式的運行效率是最高的。

  • 特色:該模式雖然效率最高,可是在該模式下數據庫將只有當前程序能夠訪問,其餘程序是不能訪問數據庫的。

  • URL:jdbc:h2:~/test

  • URL: jdbc:h2:mem:test 在內存種運行

Server Mode

  • 服務模式。在該模式下,數據庫將會運行在一個數據庫鏈接服務上。程序經過訪問數據庫鏈接服務訪問數據庫。

  • 特色:該模式的性能不如嵌入模式,可是他能夠支持多個程序訪問數據庫。

  • URL:jdbc:h2:tcp://localhost/~/tes

  • URL:jdbc:h2:ssl://localhost:8085/~/sample;

Mixed Mode

  • 混合模式:該模式,集合了嵌入模式和服務模式的優勢。他使得數據庫性能和嵌入模式同樣,同時又支出多個程序一同鏈接。

  • 背後實現:若是你是第一個鏈接該數據庫的程序,那麼你至關因而用嵌入模式鏈接數據庫。若是你是第二個或者以後鏈接的數據庫,那麼你就至關因而用服務模式鏈接的數據庫。

  • URL:jdbc:h2:~/test;AUTO_SERVER=TRUE

h2 數據庫備份

方法一: 在h2 shell模式下運行backup to '~/backup.zip',其中~/backup.zip是備份的地址。該命令會備份一個完整的數據庫。

方法二: 在數據庫文件目錄下運行java -cp h2*.jar org.h2.tools.Backup -file ~/backup.zip~/backup.zip是備份的地址。該命令會備份一個完整的數據庫。可是該方法不能在數據庫被鏈接時時運行。

h2 數據庫還原

在數據庫文件目錄下運行java -cp h2*.jar org.h2.tools.Restore -file ~/backup.zip~/backup.zip是備份的地址。該命令會還原一個完整的數據庫。可是該方法不能在數據庫被鏈接時時運行。

以SQL的形式導出h2數據庫

方法一: 在h2 shell 模式下運行script to '~/backup.sql',其中~/backup.sql是備份的地址。

方法二: 在數據庫文件目錄下運行java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:~/test -user root -password 123456 -script ~/backup.sqljdbc:h2:~/test是數據庫地址,root是用戶名,1123456是祕密,~/backup.sql是保存sql的地址。該方法數據庫不能被使用時運行。

以SQL的形式還原h2數據庫

方法一: 在h2 shell 模式下運行runscript from '~/backup.sql',其中~/backup.sql是備份的地址。而且只有確保導出目標db是空的才能順利導入,不然會有衝突。 解決方案是在運行該方法前運行drop all objects

方法二: 在數據庫文件目錄下運行java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:~/test -user root -password 123456 -script ~/backup.sqljdbc:h2:~/test是數據庫地址,root是用戶名,1123456是祕密,~/backup.sql是保存sql的地址。可是該方法不能在數據庫被鏈接時時運行。另外只有確保導出目標db是空的才能順利導入,不然會有衝突。

位運算

在mysql當中,若是sql語句中須要位運算,能夠直接使用&|這些符號。可是在h2中須要使用sql函數才能實現。具體能夠參考Functions文檔。

參考連接

官網
Starting and Using the H2 Console
Settings of the H2 Console
Creating New Databases
Using Databases in Web Applications
Upgrade, Backup, and Restore
Command Line Tools
The Shell Tool
Database URL Overview
Functions

相關文章
相關標籤/搜索