技术标签: H2 SpringBoot 数据库 sql H2 内存 数据库 效率 java
H2数据库是一个开源的关系型数据库。
H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制
应用场景:
H2的产品优势:
建议下载 All Platforms
的,Linux版本的也在里面。
解压后目录如下:
h2/
|--bin/
| |--h2-1.4.200.jar
| |--h2.bat
| |--h2.sh
| |--h2w.bat
|--docs/
|--service/
|--src/
|--build.bat
|--build.sh
目录说明:
h2-1.4.200.jar H2数据库的jar包
h2.bat Windows控制台启动脚本
h2.sh Linux控制台启动脚本
h2w.bat Windows控制台启动脚本
build.bat windows构建脚本
build.sh linux构建脚本
docs H2数据库的帮助文档(内有H2数据库的使用手册)
service 通过wrapper包装成服务。
src H2数据库的源代码
win10下启动:
进入H2 的bin目录,运行 h2.bat 或 h2w.bat(区别为h2w.bat是后台静默运行)
系统会进入H2 数据库的Web Console,http://<你的ip>:8082
jdbc:h2:D:/software/h2/data/test
,会在指定路径下创建一个名为 test.mv.db
的数据库,你可能还会看到一个 test.trace.db
的文件,这个是h2的错误信息,可以直接打开看。有没有跟我一样好奇为啥名称里面有个mv
,这是因为高版本的H2
存储引擎默默认为mvStore
,文档最后面有讲这个存储引擎的。
点击Connect,进入管理终端
H2有三种运行模式。
以嵌入式(本地)连接方式连接H2数据库
这种连接方式默认情况下只允许有一个客户端连接到H2数据库,有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了。
连接语法:jdbc:h2:[file:][<path>]<databaseName>
例如:
jdbc:h2:~/test
// 连接位于用户目录下的test数据库jdbc:h2:file:/data/sample
jdbc:h2:file:E:/H2/gacl
// Windows only使用TCP/IP的服务器模式(远程连接)方式连接H2数据库(推荐)
这种连接方式就和其他数据库类似了,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库。
连接语法:jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
范例:jdbc:h2:tcp://localhost/~/test
H2数据库的内存模式
连接语法:jdbc:h2:mem:<databaseName>
在用户目录下新建 .h2.server.properties,支持如下属性配置:
webAllowOthers
: 是否允许远程连接,默认 false。webPort
: h2 端口,默认为 8082。webSSL
: 是否启用 SSL 加密连接,默认 false。webAdminPassword
: 超级管理员密码。超级管理员密码进入如下页面需要:
如果没有手动配置此文件,以 web-server 方式首次启动 H2 后,点击打开的浏览器页面的 Save 按钮后就会自动创建一个。
.h2.server.properties
文件范例:
#H2 Server Properties
#Wed Jul 01 23:00:28 CST 2020
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc\:teradata\://whomooz/|
10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc\:db2\://localhost/test|
11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:XE|sa
12=Generic MS SQL Server 2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc\:microsoft\:sqlserver\://localhost\:1433;DatabaseName\=sqlexpress|sa
13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
14=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
15=Generic MySQL|com.mysql.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
16=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
17=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
18=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc\:derby\:test;create\=true|sa
19=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/~/test|sa
2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc\:snowflake\://accountName.snowflakecomputing.com|
20=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:~/test|root
3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc\:redshift\://endpoint\:5439/database|
4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc\:impala\://clustername\:21050/default|
5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc\:hive2\://clustername\:10000/default|
6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc\:hive\://clustername\:10000/default|
7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://name.database.windows.net\:1433|
8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
9=Generic SQLite|org.sqlite.JDBC|jdbc\:sqlite\:test|sa
webAllowOthers=false
webPort=8082
webSSL=false
webAdminPassword=111111
注:在 H2 Control 每次构建的数据库连接保存后都会作为历史配置项自动保存到 .h2.server.properties 文件内,一行一个链接配置,格式为 <number>=<name>|<driver>|<url>|<user>
。
上述编号 0~20 的连接配置是 H2 默认提供的,编号 21 是我自行创建保存的,连接的密码因安全性不会保存下来。
添加依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
配置如下:
spring.jpa.database=h2
spring.jpa.show-sql=true
# ddl执行方式,update create 等
spring.jpa.hibernate.ddl-auto=update
spring.datasource.platform=h2 #表明使用的数据库平台是h2
spring.datasource.url=jdbc:h2:./data/test;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=123456
spring.datasource.driverClassName=org.h2.Driver
# 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
spring.h2.console.settings.web-allow-others=true
# 进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。
spring.h2.console.path=/h2-consloe
# 进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
spring.h2.console.enabled=true
FilePath的格式说明:
./{path}/{fileName}
在当前程序的根目录下创建目录和数据库文件
~/{path}/{fileName}
在当前用户的根目录下创建目录和数据库文件(windows即用户目录,Linux即home目录)
C:/{path}/{fileName}
在指定盘符的指定目录下创建数据库文件
附加参数:
AUTO_SERVER=TRUE
启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式
DB_CLOSE_ON_EXIT=FALSE
,当虚拟机退出时并不关闭数据库
MODE=MYSQL
兼容MySQL
更多URL格式和示例可以看这篇博客最下面:H2数据库使用简介
使用和MySQL没啥区别,MyBatis,Hibernate以前怎么用,现在还怎么用,主要就是配置。
上面已经提到过,类似 test.trace.db
这样的文件,就是H2的错误信息,我们打开看看:
我们主要去找 [*]
这个符号和后面的错误码,然后对照着官方的错误码说明看,就知道哪里报错了。
我们看看[42001-200]
这个错误码,前面的 42001 是错误码,后面的 200 的 h2 的版本
大概意思就是:尝试执行无效的SQL语句时引发代码42001的错误,原因就是 H2
不支持
MySQL
的 ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
这些设置,创建表的时候去掉就好了。
自动获取IP地址是动态IP,是通过DHCP来获取IP地址,每次上网这个IP都不一样,在IP地址租期满后就有可能会换IP地址了。 使用固定IP地址是静态IP,是自己指定一个IP地址,ISP随时可以到你家查看。手动设置IP地址有个好处,就是一旦设定好后在不更改的情况下IP地址是固定的。 DHCP介绍:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应...
java date String 类型相互转换这种转换要用到java.text.SimpleDateFormat类字符串转换成日期类型:方法1:也是最简单的方法 Date date=new Date("2008-04-14");方法2:SimpleDateFormat sdf=new SimpleDateFormat("yyyy-M...文章lhyxcxy2015-10-17732浏览量c#与ja...
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------Dom: Document Object Model(文档对像模型) CSS+JavaScript+Dom=DHTMLDom具有对Html文件和XML文件元素的访问控制
参考转载:Ubuntu 18.04 YOLOv5 ros_yolo 环境配置 数据集标注error:out of data环境ubuntu1804+ros-melodic+cuda10.2+py3.8+pytouch1.8.1步骤一.编译cd catkin_ws/srcgit clone https://github.com/OuyangJunyuan/ros-yolov5.gitgit clone https://github.com/catkin/catkin_simple.gitc
JsonSchmea用法简介JSON Schema是基于JSON格式,用于定义JSON数据结构以及校验JSON数据内容。JSON Schema官网地址:http://json-schema.org/个人观点:JsonSchema类似于xml的schema和DTD的作用,主要是用来规范json的格式。关键字及其描述关键字描述$schema表示该JSON Sche...
已去除链接啦,带二维码的示意图片,也去除了,呵呵免费视频文件自动生成视频二维码的方式详解场景需求:自己有录制好的avi、mpg、mkv、wmv等视频文件,希望实现其他人扫二维码直接可以观看。工具要求:须注册一个酷播云的云平台管理帐号,免费的有2G-5G空间,10G至15G流量,写评测文章还可以获得20G流量。酷播云简要介绍:1. 可以实现视频全终端观看...
本教程的目标是教你在如何在Matinee中使用骨架网格的一些基础知识。 您将学习如何连接和操纵骨架网格并使骨架网格物体播放动画。
课程目录 01合格程序员的第一步:算法与数据结构 02如何事半功倍地学习算法与数据结构 03如何计算算法的复杂度 04如何通过LeetCode来进行算法题目练习 理论讲解+面试题实战 05理论讲解:数组&链表 06面试题:反转一个单链表&判断链表是否有环 07理论讲解:堆栈&队列 ...
背景微信虽然推出了微信开放标签可以实现h5跳转小程序。但是,开发者在使用之前要在公众号设置JS接口安全域名,不仅限制个数还限制修改次数,而且在使用之前还得获取access_token、ticket等计算signature传入config,非常麻烦。怎么解决这个问题呢?使用云开发静态托管可以免鉴权的跳转任意合规小程序。流程对比传统公众号开发静态网站托管静态网站托管静态网站托管是云开发为开发者提供的 Web 资源托管服务,网站的静态资源(HTML、JavaScript、CSS、图片
先使用arduino,做一个串口的重复输入,我手头使用的就是mega版。在arduino自己的ide中做好配置这里需要配置好,开发板,处理器还有端口。程序中先要初始化端口,而后要不断打印“Hello world”void setup() { // put your setup code here, to run once: Serial.begin(9600...
查看当前登录用户是谁whoami (字母之间没有空格)切换用户的命令为:su username普通用户切换rootsudo su搭建git服务器没有git先安装git使用git之前先需要配置用户信息,如用户名和邮箱信息,可填QQ邮箱。方便在有问题的时候,其他人可以通过此邮箱发反馈信息。git config --global user.name “XXX”git config ...
1、在pycharm的寻找并安装插件pywin32时报错;大致意思是安装失败,建议的解决方案:尝试从系统终端运行此命令。确保使用正确的’pip’版本,该版本已为位于如下地址:‘F:\python3\python_code\venv\Scripts\python.exe’.2、解决办法:a、将pip升级到最新;在报错显示的文件路径中找到并双击easy.install.exe;或者在pycharm客户端中更新pip;或者在报错显示的文件路径中打开cmd运行窗口,输入python -m pip