H2数据库

H2是一个用Java开发的嵌入式数据库,它自己只是一个类库,能够直接嵌入到应用项目中。html

  H2最大的用途在于能够同应用程序打包在一块儿发布,这样能够很是方便地存储少许结构化数据。java

  它的另外一个用途是用于单元测shi。启动速度快,并且能够关闭持久化功能,每个用例执行完随即还原到初始状态。linux

  H2的第三个用处是做为缓存,做为NoSQL的一个补充。当某些场景下数据模型必须为关系型,能够拿它当Memcached使,做为后端MySQL/Oracle的一个缓冲层,缓存一些不常常变化但须要频繁访问的数据,好比字典表、权限表。不过这样系统架构就会比较复杂了。web

 

1、产品优点  sql

  • 纯Java编写,不受平台的限制;
  • 只有一个jar文件,适合做为嵌入式数据库使用;
  • h2提供了一个十分方便的web控制台用于操做和管理数据库内容;
  • 功能完整,支持标准SQL和JDBC。麻雀虽小五脏俱全;
  • 支持内嵌模式、服务器模式和集群。

 

2、下载和安装数据库

(一)下载windows

  H2数据库下载地址:http://www.h2database.com/html/download.html后端

 

  聪明如你确定会选第二个。Windows、Linux下均可以直接解压缩就用,符合永远中二中年开发者的使用习惯。浏览器

(二)解压缩后的目录结构:缓存

  h2

  |---bin

  |    |---h2-1.1.116.jar   //H2数据库的jar包(驱动也在里面)

  |    |---h2.bat              //Windows控制台启动脚本

  |    |---h2.sh                  //Linux控制台启动脚本

  |    |---h2w.bat              //Windows控制台启动脚本(不带黑屏窗口)

  |---docs                       //H2数据库的帮助文档(内有H2数据库的使用手册)

  |---service //经过wrapper包装成服务。

  |---src //H2数据库的源代码

  |---build.bat //windows构建脚本

  |---build.sh //linux构建脚本

 

  此时就算“安装”完成了。

 

3、运行模式与运行方式

(一)运行模式

  H2有三种运行模式。

  1、内嵌模式(Embedded Mode)

  内嵌模式下,应用和数据库同在一个JVM中,经过JDBC进行链接。 可持久化,但同时只能一个客户端链接。内嵌模式性能会比较好。

  2、服务器模式(Server Mode)

  使用服务器模式和内嵌模式同样,只不过它能够跑在另外一个进程里。

  3、 混合模式

  第一个应用之内嵌模式启动它,对于后面的应用来讲它是服务器模式跑着的。混合模式是内嵌模式和服务器模式的组合。第一个应用经过内嵌模式与数据库创建链接,同时也做为一个服务器启动,因而另外的应用(运行在不一样的进程或是虚拟机上)能够同时访问一样的数据。第一个应用的本地链接与嵌入式模式的链接性能同样的快,而其它链接理论上会略慢。 

(二)运行方式

  开发中确定是Server Mode方便,由于须要用工具管理数据。因此进入H2的bin目录。

  若是你在Win环境能够运行h2.bat或h2w.bat。区别只是后者是后台静默运行。

  若是你在Linux环境,可运行./h2.sh文件欢快地跑起来数据库服务。但其实不建议酱紫,由于这样有诸多不便。可以下修改:

  1. 复制h2.sh为h2_server.sh文件;

  1. 编辑h2_server.sh,以下:#!/bin/shdir=$(dirname"$0")java -cp "$dir/h2-1.3.176.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -webPort 8082"$@"
  2. 说明: 

  org.h2.tools.Server: 以服务器模式启动 

  -tcpAllowOthers: 容许远程机器经过TCP方式访问 

  -webAllowOthers: 容许远程机器经过浏览器访问 

  -webPort 8082: 默认的访问端口(8082为未被占用的端口,若是此端口已经被其余端口占用,则改成其余端口)

  1. 具体的运行方式

  ①chmod修改文件权限;

  ②输入nohup ./h2_server.sh &回车。这样能够后台运行;

 

4、远程管理

  1. 经过远程浏览器来访问h2 

  访问地址:http://服务器ip:8082/ ,出现以下页面:

  2.路径的配置

  jdbc:h2:tcp://localhost//usr/h2/data/rlib 是H2的路径。tcp表明使用tcp方式访问。localhost/是IP。由于例子是在Linux下,数据库的文件路径是“/usr/h2/data/rlib”,因此localhost/后面还有个/。详细的URL设置可见本文附录。(聪明如你,可能会问为何既然H2远程部署在Linux下但使用浏览器访问IP还填写localhost?就不告诉你)

  User name : sa是h2默认的用户,密码可空。但做为永远中二随性的中年开发者,好歹设置下密码,尤为当你的H2部署在公网时。否则会被无聊人把数据删到汗裤都不剩。

 

  3.点击如图Test connect按钮测shi链接。此时若是数据库文件自己不存在则会自动建立。数据库文件自动生成到/usr/h2/data/目录下,名为rlib.mv.db。点击Connect,进入管理终端。

  H2的管理终端作得很不错的。按Ctrl+Enter执行输入区的SQL,按Shift+Enter执行当前选中的SQL。

 

5、数据备份恢复

  不能备份和导入数据的数据库是跛脚的。可经过自带的CSVWRITE方法导出为csv格式文件,也可经过CSVREAD 导入数据。

  (一)导出函数CSVWRITE

  例子:CALL CSVWRITE('test2.csv', 'SELECT * FROM TEST', 'charset=UTF-8 fieldSeparator=|');

  注意:导出时就算加上编码,导出后的文件用VIM、Editplus查看是正常,但用Excel查看也仍然会是乱码的。须要用Editplus另存为Unicode,就行了。

  (二)导入函数CSVWRITE

  语法:CSVREAD(fileNameString [, columnsString [, csvOptions ] ] )

  例子①:导入数据:INSERT INTO TEST ( SELECT * FROM CSVREAD('d:/test.csv ')) ;

  例子②:导入结构及数据,根据csv文件建立h2数据表。

  //csv文件数据建立test表

  CREATE TABLE TEST AS SELECT * FROM CS VREAD('d:/test.csv ');

  //建立test表,csv文件相应的列插入到test表相应的字段

  CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255)) AS SELECT * FROM CSVREAD('d:/test.csv ');

  (三)csvOptions

6、应用程序开发

  终于到了开发使用环节了。H2数据库的开发很是简单,和MySQL等没有太大区别。

  (一)加入Maven依赖

<dependency>

<groupId>com.h2database</groupId>

<artifactId>h2</artifactId>

<version>1.4.195</version>

</dependency>

  (二)建立db.properties

driverClassName=org.h2.Driver

#此处的写法是使用嵌入模式连接H2库,紧接着那行是使用Server Mode用tcp链接。区别一个是前者性能更好,后者可同时多个客户端链接

url=jdbc:h2:D:/test

#url=jdbc:h2:tcp://1localhost//usr/h2/data/rlib

username=sa

password=

 

PS:在使用嵌入模式连接H2库时,使用管理页面链接会报错以下:

  (三)使用如上db.properties便可使用H2数据库进行开发。具体的数据库操做等不属于H2范畴,可自行参kao其它资料。

 

 

附录:H2数据库不一样模式链接字串

  URL Format and Examples
Embedded (local) connection jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)
In-memory (private) jdbc:h2:mem:
In-memory (named) jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem
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>]/<databaseName>
jdbc:h2:ssl://localhost:8085/~/sample;
Using encrypted files jdbc:h2:<url>;CIPHER=AES
jdbc:h2:ssl://localhost/~/test;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=AES
File locking methods jdbc:h2:<url>;FILE_LOCK={FILE|SOCKET|NO}
jdbc:h2:file:~/private;CIPHER=AES;FILE_LOCK=SOCKET
Only open if it already exists jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE
Don't close the database when the VM exits jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE
Execute SQL on connection jdbc:h2:<url>;INIT=RUNSCRIPT FROM '~/create.sql'
jdbc:h2:file:~/sample;INIT=RUNSCRIPT FROM '~/create.sql'\;RUNSCRIPT FROM '~/populate.sql'
User name and/or password jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123
Debug trace settings jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
Ignore unknown settings jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE
Custom file access mode jdbc:h2:<url>;ACCESS_MODE_DATA=rws
Database in a zip file jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test
Compatibility mode jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL
Auto-reconnect jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE
Automatic mixed mode jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE
Page size jdbc:h2:<url>;PAGE_SIZE=512
Changing other settings jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...] jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3
相关文章
相关标签/搜索