方便开发 h2数据库能够做为一个嵌入式的数据库使用,在开发环境种使用很是方便。不像mysql等数据库须要专门启动一个数据库服务,并作相关配置。能够大大减小开发时的环境配置成本。html
方便测试 h2数据库能够做为单元测试种使用的数据库。和第一点相似,利用h2数据的嵌入式的特色,在单元测试种使用该数据库将大大的下降配置成本。java
方便部署 即便是在生产环境中,我也很是很是推荐使用h2。由于该数据库真的是很是的轻便,很是有利于程序的发布。过去若是使用mysql这种数据库,在发布前还须要先将mysql服务器开启,并创建相关db。而使用h2,你几乎能够彻底忽略这些过程。程序发布的过程,你只须要集中在将程序运行起来便可。mysql
性能不错 h2在必定程度上,性能彻底不弱于mysql。若是你的程序的用户不超过1w,那么我以为h2在性能上彻底能够和mysql媲美。至于更大的数据量和用户数是否可以知足需求,我也不知道。对于初创产品而言,我以为h2在性能上绝对已经知足开发者的需求了。web
只须要不多的资源 目前若是在要服务器上运行起mysql服务,那么内存就会占据约500mb。若是你的服务器只有1g的内存,那么随着程序运行,mysql会占据更多的资源,接着就会致使资源不够使用,mysql服务被关闭。而使用h2就完成没有这样的问题。h2占据的资源很是的少,几乎不会被你察觉。sql
h2和mysql很大的一个区别是,你不须要在链接数据库以前建立数据库。若是在链接数据库时,h2发现没有该数据库,其会自动新建数据库文件。所以最快体验h2的方法,就是直接去链接一个h2数据库就能够了。下面举个用h2 shell链接数据库的例子。shell
运行以下命令java -cp h2*.jar org.h2.tools.Shell
,h2*.jar
文件是h2
的运行文件,你能够在官网上下载到。数据库
根据提示输入URL:jdbc:h2:mem:test
。服务器
根据提示输入Driver:org.h2.Driver
。app
根据提示输入User:root
。tcp
根据提示输入Password:123456
。
这个时候你已经成功的链接到了数据库,并能够经过SQL语句对数据库进行操做了。在上面的步骤当中,你链接到了内存当中的test
数据库,虽然他开始不存在,可是h2自动帮你新建了该数据库。除了在内存种存储数据库文件外,你也能够在文件中存储数据库,你只须要把URL改为jdbc:h2:~/test
,其便会链接~/test
路径对应的数据库。
h2 web console
是一个GUI的数据库管理工具,经过他你能够很方便的管理你的数据库。他的做用就至关于PhpMyAdmin
。我通常会在开发环境开启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
的远程访问功能。
运行以下命令 java -cp h2*.jar org.h2.tools.Console -webAllowOthers
。使用该命令打开的h2 web console
就能够在远程访问。h2*.jar
文件是h2
的运行文件,你能够在官网上下载到。
h2的shell模式,你能够理解为是h2的命令行。你在该模式下能够经过各类命令行和SQL语句对数据库进行操做。
运行以下命令java -cp h2*.jar org.h2.tools.Shell
,便打开了h2的shell模式。运行该命令后你还须要根据提示输入DRIVER CLASS
、URL
、USER NAME
、PASSWORD
。h2*.jar
文件是h2
的运行文件,你能够在官网上下载到。
h2
有三种运行模式,分别是Embedded Mode
、Server Mode
、Mixed Mode
。
嵌入模式:在该模式下,程序会直接链接数据库,访问数据库文件。该模式的运行效率是最高的。
特色:该模式虽然效率最高,可是在该模式下数据库将只有当前程序能够访问,其余程序是不能访问数据库的。
URL:jdbc:h2:~/test
URL: jdbc:h2:mem:test
在内存种运行
服务模式。在该模式下,数据库将会运行在一个数据库链接服务上。程序经过访问数据库链接服务访问数据库。
特色:该模式的性能不如嵌入模式,可是他能够支持多个程序访问数据库。
URL:jdbc:h2:tcp://localhost/~/tes
URL:jdbc:h2:ssl://localhost:8085/~/sample;
混合模式:该模式,集合了嵌入模式和服务模式的优势。他使得数据库性能和嵌入模式同样,同时又支出多个程序一同链接。
背后实现:若是你是第一个链接该数据库的程序,那么你至关因而用嵌入模式链接数据库。若是你是第二个或者以后链接的数据库,那么你就至关因而用服务模式链接的数据库。
URL:jdbc:h2:~/test;AUTO_SERVER=TRUE
方法一: 在h2 shell模式下运行backup to '~/backup.zip'
,其中~/backup.zip
是备份的地址。该命令会备份一个完整的数据库。
方法二: 在数据库文件目录下运行java -cp h2*.jar org.h2.tools.Backup -file ~/backup.zip
,~/backup.zip
是备份的地址。该命令会备份一个完整的数据库。可是该方法不能在数据库被链接时时运行。
在数据库文件目录下运行java -cp h2*.jar org.h2.tools.Restore -file ~/backup.zip
,~/backup.zip
是备份的地址。该命令会还原一个完整的数据库。可是该方法不能在数据库被链接时时运行。
方法一: 在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.sql
,jdbc:h2:~/test
是数据库地址,root
是用户名,1123456
是秘密,~/backup.sql
是保存sql的地址。该方法数据库不能被使用时运行。
方法一: 在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.sql
,jdbc: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