Java教程

H2数据库学习笔记

本文主要是介绍H2数据库学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • H2数据库学习笔记
    • H2的优势
    • H2数据库内嵌到应用中
      • H2提供了一个数据库查看页面
    • H2数据库的特性
      • 主要特性
      • 附加特性
      • 对SQL的支持
      • 安全特性
      • 其他特性
    • 数据URL类型及其解释
  • H2支持的数据类型
  • H2数据库常用的函数
  • H2做单元测试

H2数据库学习笔记

H2数据库是一个开源的关系型数据库,采用Java语言编写的嵌入式数据库引擎,它就是一个类库(因为是Java语言编写的,所以对外提供的是一个jar包文件),可以直接嵌入到应用的项目中,不受平台的限制(一个jar包,随用随引用)。
H2 数据库官网

H2的优势

  • 纯java编写,不受平台限制。
  • 只有一个jar文件,适合作为嵌入式数据库使用。
  • h2还提供了一个web控制台,用于造作和管理数据内容,但其缺点就是要启动应用才可以查看这个控制台页面。
  • 功能完整,支持标准的SQL和JDBC。
  • 支持内嵌模式、服务器模式和集群。

H2数据库内嵌到应用中

h2数据库可以有内嵌模式,和服务器模式。如果使用内嵌模式,需要按照以下步骤操作:

  • 添加h2*.jar到项目中(H2不需要其他的依赖)
  • 使用JDBC驱动类:org.h2.Driver
  • 数据库URLjdbc:h2:~/test将在本地用户目录下打开一个名为test的数据库
  • 一个新的数据库就自动创建完成了

H2提供了一个数据库查看页面

在这个页面中,你可以操作数据库表和数据。

数据库启动后,打开历览器:http:localhost:8082打开数据库管理页面

可以在配置文件中设置数据密码。
登录进入页面后:

这里可以对数据库表和数据进行操作,可以执行sql语句。
安装对用的H2数据文件(zip文件或者jar文件)
本地安装完成后,对应的文件夹目录及作用如下:

H2数据库的特性

主要特性

  • 非常快速的数据库引擎
  • 开源的
  • 由Java语言编写
  • 支持标准的SQL、JDBC API
  • 有内嵌模式、服务模式、集群
  • 强大的安全性
  • 可以使用PostgreSQL ODBC驱动程序
  • 多版本并发

附加特性

  • 基于磁盘或内存中的数据库和表、只读数据库支持、临时表
  • 事务支持(读提交),两阶段提交
  • 支持多连接和表级锁定
  • 基于成本的优化器,使用遗传算法进行复杂查询,零管理

对SQL的支持

  • 支持多种约束和信息约束
  • 具有级联的参照完整性/外键约束,检查约束
  • 内部和外部联接、子查询、只读视图和内联视图
  • 触发器和 Java 函数/存储过程
  • 许多内置功能,包括 XML 和无损数据压缩
  • 广泛的数据类型,包括大对象 (BLOB/CLOB) 和数组
  • 序列和自动增量列、计算列(可用于基于函数的索引)
  • 支持用户和角色
  • 对很多开源数据都兼容。(IBM DB2、Apache Derby、HSQLDB、MS SQL Server、MySQL、Oracle 和 PostgreSQL)

安全特性

  • 包括 SQL 注入问题的解决方案
  • 支持用户密码认证,使用SHA-256 和 salt
  • 对于服务器模式的连接,用户密码永远不会通过网络以纯文本形式传输(即使使用不安全的连接;这仅适用于 TCP 服务器,但不适用于 H2 控制台;也不允许您在 数据库网址中设置密码)
  • 所有数据库文件(包括可用于备份数据的脚本文件)均可使用 AES-128 加密算法进行加密
  • 远程 JDBC 驱动程序支持通过 TLS 的 TCP/IP 连接
  • 内置网络服务器支持通过 TLS 的连接
  • 可以使用字符数组而不是字符串将密码发送到数据库

其他特性

  • 占用空间小(约2M),内存要求低
  • 多种索引类型(b-tree、tree、hash)
  • 支持复合索引
  • 支持CSV文件(逗号分隔值)
  • 支持链接表和内置的虚拟“范围”表
  • 支持 EXPLAIN PLAN 语句; 复杂的跟踪选项
  • 可以延迟或禁用数据库关闭以提高性能
  • 具有基于web控制台的应用程序
  • 数据库可以生成SQL脚本文件
  • 包含可以转储数据库内容的恢复工具
  • 支持变量(例如计算运行总数)
  • 自动重新编译准备好的语句
  • 使用少量数据库文件
  • 对每个记录和日志条目使用校验和以确保数据完整性
  • 测试良好(高代码覆盖率,随机压力测试)

数据URL类型及其解释

该数据库支持多种连接方式和连接设置。 这是使用不同的数据库 URL 实现的。 URL 中的设置不区分大小写。

H2支持的数据类型

INT类型:对应java.lang.Integer
REAL类型:对应java.lang.Float
DOUBLE类型:对应java.lang.Double
DECIMAL类型:对应java.math.BigDecimal,比如DECIMAL(20,2)
CHAR类型:对应java.lang.String,比如CHAR(10)
VARCHAR类型:对应java.lang.String
VARCHAR_IGNORECASE类型:对应java.lang.String,忽略大小写
BOOLEAN类型:对应java.lang.Boolean
TIME类型:对应java.sql.Time,当转换成java.sql.Date时,日期会设置成1970-01-01
DATE类型:对应java.sql.Date,格式为yyyy-MM-dd,其时间默认为00:00:00
TIMESTAMP类型:对应java.sql.Timestamp,格式为yyyy-MM-dd hh:mm:ss[.nnnnnnnnn],也支持java.util.Date
TINYINT类型:对应java.lang.Byte,-128 to 127
SMARTINT类型:对应java.lang.Short,-32768 to 32767
BIGINT类型:对应java.lang.Long
IDENTITY类型:自增类型,对应java.lang.Long,值范围-9223372036854775808 to 9223372036854775807
BINARY类型:二进制字节存储,最大不超过2GB,且完全保存在内存,比如BINARY(1000)
BLOB类型:对应java.sql.Blob,与BINARY相似,但针对很大的数据(如文件或图像),且不完全保存在内存,使用PreparedStatement.setBinaryStream来保存数据。
CLOB类型:与VARCHAR相似,但适用于保存很大的数据,且数据不完全保存在内存。用于任意尺寸的XML或HTML文档、文本文件等。使用PreparedStatement.setCharacterStream保存数据。
OTHER类型:对应java.lang.Object,用于存储序列化的Java对象,使用的是字节数组,客户端只能做序列化或反序列化,使用getObject反序列化,使用PreparedStatement.setObject存储数据。
UUID类型:对应java.util.UUID,128位的值,可以使用PreparedStatement.setBytes或setString或setObject(uuid)保存数据,使用ResultSet.getObject取回数据。
ARRAY类型:对应java.lang.Object[]

H2数据库常用的函数

CURRENT_DATE:取当前日期
CURRENT_TIME:取当前时间
CURRENT_TIMESTAMP:取当前日期时间
LOWER:字符串小写
UPPER:字符串大写
CONCAT:字符串连结
CHAR:ASCII值转字符
ASCII:字符转ASCII值
ENCRYPT:加密函数,支持AES算法,Block尺寸为16字节,
比如CALL ENCRYPT('AES', '00', STRINGTOUTF8('Test'))
DECRYPT:解密函数,支持AES算法,Block尺寸为16字节,
比如CALL TRIM(CHAR(0) FROM UTF8TOSTRING(
DECRYPT('AES', '00', '3fabb4de8f1ee2e97d7793bab2db1116')))
HASH:哈希函数,只支持SHA256算法,比如CALL HASH('SHA256', STRINGTOUTF8('Password'), 1000)
MAX:求最大
MIN:求最小
SUM:求和
CURRENT_USER:返回当前用户
H2VERSION:返回H2数据库的版本
DISK_SPACE_USED:返回表使用的磁盘空间尺寸,比如CALL DISK_SPACE_USED('my_table');
DATABASE_PATH:返回数据库文件的路径和数据库名,比如CALL DATABASE_PATH();

H2做单元测试

springboot结合hibernate与h2数据库做单元测试,模拟真实数据库时,若使用了@Audited注解,则jpa会自动基于表映射,生成一个记录表操作历史的表,该表以XXX_aud的表明存在,这个表中会自动添加 rev字段和revtype字段,其中revtype字段为tinyint类型,所以,如果模拟的数据库不支持tinyint类型的数据,则该表无法创建。

这篇关于H2数据库学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!