摘要:和第一點(diǎn)類似,利用數(shù)據(jù)的嵌入式的特點(diǎn),在單元測(cè)試種使用該數(shù)據(jù)庫(kù)將大大的降低配置成本。如果在連接數(shù)據(jù)庫(kù)時(shí),發(fā)現(xiàn)沒(méi)有該數(shù)據(jù)庫(kù),其會(huì)自動(dòng)新建數(shù)據(jù)庫(kù)文件。該模式的運(yùn)行效率是最高的。另外只有確保導(dǎo)出目標(biāo)是空的才能順利導(dǎo)入,否則會(huì)有沖突。
為什么是h2
方便開發(fā) h2數(shù)據(jù)庫(kù)可以作為一個(gè)嵌入式的數(shù)據(jù)庫(kù)使用,在開發(fā)環(huán)境種使用非常方便。不像mysql等數(shù)據(jù)庫(kù)需要專門啟動(dòng)一個(gè)數(shù)據(jù)庫(kù)服務(wù),并做相關(guān)配置。可以大大減少開發(fā)時(shí)的環(huán)境配置成本。
方便測(cè)試 h2數(shù)據(jù)庫(kù)可以作為單元測(cè)試種使用的數(shù)據(jù)庫(kù)。和第一點(diǎn)類似,利用h2數(shù)據(jù)的嵌入式的特點(diǎn),在單元測(cè)試種使用該數(shù)據(jù)庫(kù)將大大的降低配置成本。
方便部署 即使是在生產(chǎn)環(huán)境中,我也非常非常推薦使用h2。因?yàn)樵摂?shù)據(jù)庫(kù)真的是非常的輕便,非常有利于程序的發(fā)布。過(guò)去如果使用mysql這種數(shù)據(jù)庫(kù),在發(fā)布前還需要先將mysql服務(wù)器開啟,并建立相關(guān)db。而使用h2,你幾乎可以完全忽略這些過(guò)程。程序發(fā)布的過(guò)程,你只需要集中在將程序運(yùn)行起來(lái)即可。
性能不錯(cuò) h2在一定程度上,性能完全不弱于mysql。如果你的程序的用戶不超過(guò)1w,那么我覺(jué)得h2在性能上完全可以和mysql媲美。至于更大的數(shù)據(jù)量和用戶數(shù)是否能夠滿足需求,我也不知道。對(duì)于初創(chuàng)產(chǎn)品而言,我覺(jué)得h2在性能上絕對(duì)已經(jīng)滿足開發(fā)者的需求了。
只需要很少的資源 目前如果在要服務(wù)器上運(yùn)行起mysql服務(wù),那么內(nèi)存就會(huì)占據(jù)約500mb。如果你的服務(wù)器只有1g的內(nèi)存,那么隨著程序運(yùn)行,mysql會(huì)占據(jù)更多的資源,接著就會(huì)導(dǎo)致資源不夠使用,mysql服務(wù)被關(guān)閉。而使用h2就完成沒(méi)有這樣的問(wèn)題。h2占據(jù)的資源非常的少,幾乎不會(huì)被你察覺(jué)。
快速開始h2和mysql很大的一個(gè)區(qū)別是,你不需要在連接數(shù)據(jù)庫(kù)之前創(chuàng)建數(shù)據(jù)庫(kù)。如果在連接數(shù)據(jù)庫(kù)時(shí),h2發(fā)現(xiàn)沒(méi)有該數(shù)據(jù)庫(kù),其會(huì)自動(dòng)新建數(shù)據(jù)庫(kù)文件。因此最快體驗(yàn)h2的方法,就是直接去連接一個(gè)h2數(shù)據(jù)庫(kù)就可以了。下面舉個(gè)用h2 shell連接數(shù)據(jù)庫(kù)的例子。
step1運(yùn)行如下命令java -cp h2*.jar org.h2.tools.Shell,h2*.jar文件是h2的運(yùn)行文件,你可以在官網(wǎng)上下載到。
step2根據(jù)提示輸入U(xiǎn)RL:jdbc:h2:mem:test。
step3根據(jù)提示輸入Driver:org.h2.Driver。
step4根據(jù)提示輸入U(xiǎn)ser:root。
step5根據(jù)提示輸入Password:123456。
step last這個(gè)時(shí)候你已經(jīng)成功的連接到了數(shù)據(jù)庫(kù),并可以通過(guò)SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。在上面的步驟當(dāng)中,你連接到了內(nèi)存當(dāng)中的test數(shù)據(jù)庫(kù),雖然他開始不存在,但是h2自動(dòng)幫你新建了該數(shù)據(jù)庫(kù)。除了在內(nèi)存種存儲(chǔ)數(shù)據(jù)庫(kù)文件外,你也可以在文件中存儲(chǔ)數(shù)據(jù)庫(kù),你只需要把URL改成jdbc:h2:~/test,其便會(huì)連接~/test路徑對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
什么是h2 web consoleh2 web console是一個(gè)GUI的數(shù)據(jù)庫(kù)管理工具,通過(guò)他你可以很方便的管理你的數(shù)據(jù)庫(kù)。他的作用就相當(dāng)于PhpMyAdmin。我一般會(huì)在開發(fā)環(huán)境開啟h2 web console。當(dāng)然應(yīng)用沒(méi)有后臺(tái)管理這樣的工具的話,我也會(huì)在生產(chǎn)環(huán)境開啟h2 web console。
啟動(dòng)h2 web console運(yùn)行java -cp h2*.jar org.h2.tools.Console命令變可啟動(dòng)h2 web console。運(yùn)行該命令后,在結(jié)果輸出種可以看到h2 web console的訪問(wèn)地址。h2*.jar文件是h2的運(yùn)行文件,你可以在官網(wǎng)上下載到。
遠(yuǎn)程訪問(wèn) h2 web consoleh2 web console默認(rèn)是只能在本地訪問(wèn)的。也就是說(shuō)如果你在遠(yuǎn)程服務(wù)器上開啟了h2 web console那么你是沒(méi)有辦法在自己的電腦上訪問(wèn)h2 web console的。為了能在遠(yuǎn)程訪問(wèn)h2 web console,就需要開啟h2 web console的遠(yuǎn)程訪問(wèn)功能。
運(yùn)行如下命令 java -cp h2*.jar org.h2.tools.Console -webAllowOthers。使用該命令打開的h2 web console就可以在遠(yuǎn)程訪問(wèn)。h2*.jar文件是h2的運(yùn)行文件,你可以在官網(wǎng)上下載到。
h2 shell模式h2的shell模式,你可以理解為是h2的命令行。你在該模式下可以通過(guò)各種命令行和SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。
運(yùn)行如下命令java -cp h2*.jar org.h2.tools.Shell,便打開了h2的shell模式。運(yùn)行該命令后你還需要根據(jù)提示輸入DRIVER CLASS、URL、USER NAME、PASSWORD。h2*.jar文件是h2的運(yùn)行文件,你可以在官網(wǎng)上下載到。
h2的連接模式h2有三種運(yùn)行模式,分別是Embedded Mode、Server Mode、Mixed Mode。
Embedded Mode嵌入模式:在該模式下,程序會(huì)直接連接數(shù)據(jù)庫(kù),訪問(wèn)數(shù)據(jù)庫(kù)文件。該模式的運(yùn)行效率是最高的。
特點(diǎn):該模式雖然效率最高,但是在該模式下數(shù)據(jù)庫(kù)將只有當(dāng)前程序可以訪問(wèn),其他程序是不能訪問(wèn)數(shù)據(jù)庫(kù)的。
URL:jdbc:h2:~/test
URL: jdbc:h2:mem:test 在內(nèi)存種運(yùn)行
Server Mode服務(wù)模式。在該模式下,數(shù)據(jù)庫(kù)將會(huì)運(yùn)行在一個(gè)數(shù)據(jù)庫(kù)連接服務(wù)上。程序通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)連接服務(wù)訪問(wèn)數(shù)據(jù)庫(kù)。
特點(diǎn):該模式的性能不如嵌入模式,但是他可以支持多個(gè)程序訪問(wèn)數(shù)據(jù)庫(kù)。
URL:jdbc:h2:tcp://localhost/~/tes
URL:jdbc:h2:ssl://localhost:8085/~/sample;
Mixed Mode混合模式:該模式,集合了嵌入模式和服務(wù)模式的優(yōu)點(diǎn)。他使得數(shù)據(jù)庫(kù)性能和嵌入模式一樣,同時(shí)又支出多個(gè)程序一同連接。
背后實(shí)現(xiàn):如果你是第一個(gè)連接該數(shù)據(jù)庫(kù)的程序,那么你相當(dāng)于是用嵌入模式連接數(shù)據(jù)庫(kù)。如果你是第二個(gè)或者之后連接的數(shù)據(jù)庫(kù),那么你就相當(dāng)于是用服務(wù)模式連接的數(shù)據(jù)庫(kù)。
URL:jdbc:h2:~/test;AUTO_SERVER=TRUE
h2 數(shù)據(jù)庫(kù)備份方法一: 在h2 shell模式下運(yùn)行backup to "~/backup.zip",其中~/backup.zip是備份的地址。該命令會(huì)備份一個(gè)完整的數(shù)據(jù)庫(kù)。
方法二: 在數(shù)據(jù)庫(kù)文件目錄下運(yùn)行java -cp h2*.jar org.h2.tools.Backup -file ~/backup.zip,~/backup.zip是備份的地址。該命令會(huì)備份一個(gè)完整的數(shù)據(jù)庫(kù)。但是該方法不能在數(shù)據(jù)庫(kù)被連接時(shí)時(shí)運(yùn)行。
h2 數(shù)據(jù)庫(kù)還原在數(shù)據(jù)庫(kù)文件目錄下運(yùn)行java -cp h2*.jar org.h2.tools.Restore -file ~/backup.zip,~/backup.zip是備份的地址。該命令會(huì)還原一個(gè)完整的數(shù)據(jù)庫(kù)。但是該方法不能在數(shù)據(jù)庫(kù)被連接時(shí)時(shí)運(yùn)行。
以SQL的形式導(dǎo)出h2數(shù)據(jù)庫(kù)方法一: 在h2 shell 模式下運(yùn)行script to "~/backup.sql",其中~/backup.sql是備份的地址。
方法二: 在數(shù)據(jù)庫(kù)文件目錄下運(yùn)行java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:~/test -user root -password 123456 -script ~/backup.sql,jdbc:h2:~/test是數(shù)據(jù)庫(kù)地址,root是用戶名,1123456是秘密,~/backup.sql是保存sql的地址。該方法數(shù)據(jù)庫(kù)不能被使用時(shí)運(yùn)行。
以SQL的形式還原h(huán)2數(shù)據(jù)庫(kù)方法一: 在h2 shell 模式下運(yùn)行runscript from "~/backup.sql",其中~/backup.sql是備份的地址。并且只有確保導(dǎo)出目標(biāo)db是空的才能順利導(dǎo)入,否則會(huì)有沖突。 解決方案是在運(yùn)行該方法前運(yùn)行drop all objects
方法二: 在數(shù)據(jù)庫(kù)文件目錄下運(yùn)行java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:~/test -user root -password 123456 -script ~/backup.sql,jdbc:h2:~/test是數(shù)據(jù)庫(kù)地址,root是用戶名,1123456是秘密,~/backup.sql是保存sql的地址。但是該方法不能在數(shù)據(jù)庫(kù)被連接時(shí)時(shí)運(yùn)行。另外只有確保導(dǎo)出目標(biāo)db是空的才能順利導(dǎo)入,否則會(huì)有沖突。
位運(yùn)算在mysql當(dāng)中,如果sql語(yǔ)句中需要位運(yùn)算,可以直接使用&、|這些符號(hào)。但是在h2中需要使用sql函數(shù)才能實(shí)現(xiàn)。具體可以參考Functions文檔。
參考鏈接官網(wǎng)
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17549.html
摘要:依賴添加依賴文件。會(huì)自動(dòng)幫你完成的注入,之后無(wú)論你是用還是,或者別的框架就隨你了。進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行文件,對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)操作。否則只能在本機(jī)訪問(wèn)。,進(jìn)行該配置,程序開啟時(shí)就會(huì)啟動(dòng)。 依賴 添加依賴文件。如果你使用的是gradle,則可以在build.gradle文件種加入下面代碼 dependencies { compile com.h2database:...
摘要:依賴添加依賴文件。會(huì)自動(dòng)幫你完成的注入,之后無(wú)論你是用還是,或者別的框架就隨你了。進(jìn)行該配置后,每次啟動(dòng)程序,程序都會(huì)運(yùn)行文件,對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)操作。否則只能在本機(jī)訪問(wèn)。,進(jìn)行該配置,程序開啟時(shí)就會(huì)啟動(dòng)。 依賴 添加依賴文件。如果你使用的是gradle,則可以在build.gradle文件種加入下面代碼 dependencies { compile com.h2database:...
摘要:和第一點(diǎn)類似,利用數(shù)據(jù)的嵌入式的特點(diǎn),在單元測(cè)試種使用該數(shù)據(jù)庫(kù)將大大的降低配置成本。如果在連接數(shù)據(jù)庫(kù)時(shí),發(fā)現(xiàn)沒(méi)有該數(shù)據(jù)庫(kù),其會(huì)自動(dòng)新建數(shù)據(jù)庫(kù)文件。該模式的運(yùn)行效率是最高的。另外只有確保導(dǎo)出目標(biāo)是空的才能順利導(dǎo)入,否則會(huì)有沖突。 為什么是h2 方便開發(fā) h2數(shù)據(jù)庫(kù)可以作為一個(gè)嵌入式的數(shù)據(jù)庫(kù)使用,在開發(fā)環(huán)境種使用非常方便。不像mysql等數(shù)據(jù)庫(kù)需要專門啟動(dòng)一個(gè)數(shù)據(jù)庫(kù)服務(wù),并做相關(guān)配置。可...
閱讀 917·2021-11-24 09:38
閱讀 925·2021-11-23 09:51
閱讀 2939·2021-11-16 11:44
閱讀 1762·2021-09-22 15:52
閱讀 1626·2021-09-10 11:20
閱讀 1361·2019-08-30 13:47
閱讀 1291·2019-08-29 12:36
閱讀 3293·2019-08-26 10:43