#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;