h2 mysql embeded_h2指南_母鸡说事 - SegmentFault 思否

为什么是h2

方便开发 h2数据库可以作为一个嵌入式的数据库使用,在开发环境种使用非常方便。不像mysql等数据库需要专门启动一个数据库服务,并做相关配置。可以大大减少开发时的环境配置成本。

方便测试 h2数据库可以作为单元测试种使用的数据库。和第一点类似,利用h2数据的嵌入式的特点,在单元测试种使用该数据库将大大的降低配置成本。

方便部署 即使是在生产环境中,我也非常非常推荐使用h2。因为该数据库真的是非常的轻便,非常有利于程序的发布。过去如果使用mysql这种数据库,在发布前还需要先将mysql服务器开启,并建立相关db。而使用h2,你几乎可以完全忽略这些过程。程序发布的过程,你只需要集中在将程序运行起来即可。

性能不错 h2在一定程度上,性能完全不弱于mysql。如果你的程序的用户不超过1w,那么我觉得h2在性能上完全可以和mysql媲美。至于更大的数据量和用户数是否能够满足需求,我也不知道。对于初创产品而言,我觉得h2在性能上绝对已经满足开发者的需求了。

只需要很少的资源 目前如果在要服务器上运行起mysql服务,那么内存就会占据约500mb。如果你的服务器只有1g的内存,那么随着程序运行,mysql会占据更多的资源,接着就会导致资源不够使用,mysql服务被关闭。而使用h2就完成没有这样的问题。h2占据的资源非常的少,几乎不会被你察觉。

快速开始

h2和mysql很大的一个区别是,你不需要在连接数据库之前创建数据库。如果在连接数据库时,h2发现没有该数据库,其会自动新建数据库文件。因此最快体验h2的方法,就是直接去连接一个h2数据库就可以了。下面举个用h2 shell连接数据库的例子。

step1

运行如下命令java -cp h2*.jar org.h2.tools.Shell,h2*.jar文件是h2的运行文件,你可以在官网上下载到。

step2

根据提示输入URL:jdbc:h2:mem:test。

step3

根据提示输入Driver:org.h2.Driver。

step4

根据提示输入User:root。

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 CLASS、URL、USER NAME、PASSWORD。h2*.jar文件是h2的运行文件,你可以在官网上下载到。

h2的连接模式

h2有三种运行模式,分别是Embedded Mode、Server Mode、Mixed 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.sql,jdbc: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.sql,jdbc:h2:~/test是数据库地址,root是用户名,1123456是秘密,~/backup.sql是保存sql的地址。但是该方法不能在数据库被连接时时运行。另外只有确保导出目标db是空的才能顺利导入,否则会有冲突。

位运算

在mysql当中,如果sql语句中需要位运算,可以直接使用&、|这些符号。但是在h2中需要使用sql函数才能实现。具体可以参考Functions文档。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值