H2数据库学习笔记
2021/7/11 2:06:16
本文主要是介绍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
- 数据库URL
jdbc: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数据库学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-25外企也半夜发布上线吗?
- 2024-05-24鸿蒙原生应用再新丁!芒果TV 入局鸿蒙
- 2024-05-22基本概念
- 2024-05-22检索数据
- 2024-05-22排序数据
- 2024-05-22基础过滤数据
- 2024-05-22通过逻辑操作符过滤数据
- 2024-05-22通过通配符过滤数据
- 2024-05-22字段的拼接与计算
- 2024-05-22聚合函数