#H2Database 简要介绍及应用
##简要介绍
h2是一个开源的纯java编写的轻量级数据库,是一个用Java开发的嵌入式数据库,只有一个jar文件,
可以直接嵌入到应用项目中。

h2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据,它的另一个用途是用于单元测试。

h2启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。h2的第三个用处是作为缓存,作为NoSQL的一个补充。

h2的数据库服务,可通过安装服务端软件(windows和linux均支持)来提供数据库服务,单也可以直接通过h2.jar包直接通过java代码
创建服务,从而提供相应的数据库服务。通常使用h2.jar包形式来提供服务,一般都是便于用作嵌入式数据库服务时使用。如果作为普通
的数据库服务,通常都是安装服务端软件。

  • 主要特征
• 超快的数据库引擎 
  • 开源 
  • 纯JAVA编写 
  • 支持标准SQL和JDBC 
  • 支持内嵌模式、服务器模式和集群 
  • 高强度的安全保障 
  • 支持PostgreSQL的ODBC驱动 
  • 多种并发机制
  • 其他特征
• 支持磁盘和内存数据库,支持只读数据库,支持临时表 
  • 支持事务(读提交和序列化事务隔离),支持2阶段提交 
  • 支持多连接,支持表级锁 
  • 使用基于成本的优化机制,对于复杂查询使用零遗传算法进行管理 
  • 支持可滑动可更新的结果集,支持大型结果集、支持结果集排序,支持方法返回结果集 
  • 支持数据库加密(使用AES或XTEA进行加密),支持SHA-256密码加密,提供加密函数,支持SSL

##H2服务模式
也就是远程连接模式,这种模式与其他数据库使用方式基本一致。

这种模式当然前提是要先启动H2服务器,这样客户端才能连接并执行SQL脚本。

这种模式是要比内嵌模式慢的,因为数据传输使用TCP/IP协议。

  • 该模式的数据库URL设定有两种:
  • 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>]/[<path>]<databaseName>
  jdbc:h2:ssl://localhost:8085/~/sample;

##H2纯内存模式

当连接内存数据库的所有连接关闭之后,数据就会被清空。

为了维持数据,在URL后配置DB_CLOSE_DELAY=-1,会让它的生命周期同JVM一致。

  • 内存模式的数据库URL:
jdbc:h2:mem:
  jdbc:h2:mem:<databaseName>
  jdbc:h2:mem:test_mem
  jdbc:h2:tcp://localhost/mem:db1

##H2嵌入模式
这种连接方式默认情况下只允许有一个客户端连接到H2数据库,有客户端连接到H2数据库之后,此时数据库文件就会被锁定,
那么其他客户端就无法再连接了。使用嵌入模式,不需要先启动h2的服务器,直接执行客户端即可。

然而实际应用场景,应该让多个客户端访问,比如WEB端查看数据,而不是针对单一客户端连接而进行数据库文件加锁。
为了多线程操作数据库,提高性能,在URL之后配置***AUTO_SERVER=TRUE***

本地测试相对路径建立文件没有成功!

  • 内嵌模式的数据库URL:
jdbc:h2:[file:][<path>]<databaseName>
  jdbc:h2:~/test
  jdbc:h2:file:/data/sample
  jdbc:h2:file:C:/data/sample (Windows only)

##内嵌模式实际应用
###下载
H2Database 下载独立于平台的版本Platform-Independent Zip
###解压
例:D:\DOWNLOADS\h2-2018-03-18\h2\bin
BIN 目录下有两个DOS下的批处理文件分别是h2.bat 和 h2w.bat
前者是使用命令行操作,后者有web页面进行操作,简单高效。

  • 登录选项例子如下设置:
Driver Class:org.h2.Driver
  JDBC URL:jdbc:h2:file:C:/Users/Administrator/AppData/Local/Temp/h2/tickdata;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
  User Name:
  Password:

设置完之后点击Test Connection即可。创建成功便可登录。

###语法部分
例:SELECT :point AS POINT, :prtview AS PRTVIEW, :date AS DATE, :value AS VALUE FROM DUAL;

使用ELSQL(或者PreparedStatement) 设置变量时,H2的SELECT语法解析器 不能识别 已取别名如POINT等的类型的。

  • 目前的这种解决方案—设置局部变量:
SET @POINT = point; SET @PRTVIEW = prtview;
  SELECT @POINT AS POINT, @PRTVIEW AS PRTVIEW, @DATE AS DATE, @VALUE AS VALUE FROM DUAL;