SpringBoot2.x系列教程30--H2内存数据库使用教程详解

简介: 前言我们在开发或学习时,有时候我们想编写一个数据库操作的小demo,但又不想利用MySQL、Oracle等数据库进行建库建表操作,因为我只想写个小案例,感觉没必要弄个很大很麻烦的数据库。而且这个案例中的数据用完之后就不再需要了,所以也不需要进行数据的持久化。那有没有什么办法可以满足我们的这个需求呢?既然你提了需求,那么 壹哥 就想办法满足你的需求,今天壹哥给大家介绍一个可以不进行持久化操作,用起来也没有那么麻烦的数据库,就是H2内存数据库!H2是一款内存数据库,适合我们在开发阶段、学习阶段调试代码使用,并不适用于生产阶段,可以满足我们学习与调试代码的需求。接下来就跟着我来学习一下这个

前言

我们在开发或学习时,有时候我们想编写一个数据库操作的小demo,但又不想利用MySQL、Oracle等数据库进行建库建表操作,因为我只想写个小案例,感觉没必要弄个很大很麻烦的数据库。而且这个案例中的数据用完之后就不再需要了,所以也不需要进行数据的持久化。那有没有什么办法可以满足我们的这个需求呢?

既然你提了需求,那么 壹哥 就想办法满足你的需求,今天壹哥给大家介绍一个可以不进行持久化操作,用起来也没有那么麻烦的数据库,就是H2内存数据库!

H2是一款内存数据库,适合我们在开发阶段、学习阶段调试代码使用,并不适用于生产阶段,可以满足我们学习与调试代码的需求。接下来就跟着我来学习一下这个H2数据库吧。

一. H2数据库

1. H2简介

H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。

H2数据库又被称为内存数据库,因为它支持在内存中创建数据库和表。所以如果我们使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。

2. H2的用途

H2 主要有如下三个用途:

  • 最常使用的用途就在于可以同应用程序一起打包发布,可以非常方便地存储少量的结构化数据;
  • 可以用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态;
  • 可以作为缓存,即当做内存数据库,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它充当Memcached使用,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。

3. H2的3种运行模式

  • 内嵌模式(Embedded Mode): 使用 JDBC 的本地连接。在内嵌模式下,应用程序和数据库在同一个JVM中,通过JDBC进行连接。可以实现持久化,但同时只能有一个客户端连接。内嵌模式性能会比较好。
    这是最快也是最容易的连接方式。缺点是数据库可能只在任何时候在一个虚拟机(和类加载器)中打开。与所有模式一样,支持持久性和内存数据库。对并发打开数据库的数量或打开连接的数量没有限制。
  • 服务器模式(Server Mode): 使用 JDBC 或 ODBC 在 TCP/IP 上的远程连接。使用服务器模式和内嵌模式一样,只不过它可以跑在另一个进程里。
    服务器模式比嵌入式模式慢,因为所有数据都通过TCP/IP传输。与所有模式一样,支持持久性和内存数据库。对每个服务器并发打开的数据库数量或打开连接的数量没有限制。
  • 混合模式: 混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。第一个应用程序的本地连接与嵌入式模式的连接性能一样的快,而其它连接理论上会略慢。
    服务器可以从应用程序内(使用服务器API)启动或停止,或自动(自动混合模式)。当使用自动混合模式时,所有想要连接到数据库的客户端(无论是本地连接还是远程连接)都可以使用完全相同的数据库URL来实现。

4. H2的2种连接方式

  • 以嵌入式(本地)连接方式连接H2数据库:这种连接方式默认情况下只允许有一个客户端连接到H2数据库。当有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了。

连接语法:

jdbc:h2:[file:][<path>]<databaseName>
例如:
//连接位于用户目录下的test数据库
jdbc:h2:~/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的Web控制台

H2虽然是一个内存数据库,但要想使用它,我们也得先进行安装配置一下。尤其是H2的Web控制台,可以帮助我们查看保存到内存中的数据信息,所以接下来我就先带各位安装配置一下这个Web控制台。

2.1 控制台下载地址

h2 数据库下载地址:
http://www.h2database.com/html/main.html

或者:
http://www.h2database.com/html/download.html

我们可以在官网上选择一个版本进行下载,可以下载安装器或者直接下载软件包。这里我选择 "Platform-Independent Zip" 版本,这是一个zip压缩包,解压后即可使用,既可用于 Windows 平台,也可用于 Linux 平台。

2. H2软件包目录结构

h2
 |---bin
 |    |---h2-1.1.116.jar  //H2数据库的jar包(驱动也在里面)
 |    |---h2.bat  //Windows控制台启动脚本
 |    |---h2.sh  //Linux控制台启动脚本
 |    |---h2w.bat  //Windows控制台启动脚本(不带黑屏窗口)
 |---docs  //H2数据库的帮助文档(内有H2数据库的使用手册)
 |---service  //通过wrapper包装成服务。
 |---src  //H2数据库的源代码
 |---build.bat  //windows构建脚本
 |---build.sh  //linux构建脚本
 

3. windows下启动软件

我们可以进入到h2的bin目录下,点击h2.bat或者h2w.bat,运行软件。我这里选择的是点击h2w.bat,该方式会在后台运行。

4. Linux下启动软件

如果是在 Linux 环境下,可运行./h2.sh 文件来启动数据库服务,但不建议这样直接启动,因为需要带一些参数,需要进行如下修改:

1).复制h2.sh为h2_server.sh文件;

2).编辑h2_server.sh,如下:

#!/bin/shdir=$(dirname"$0")java -cp"$dir/h2-1.4.197.jar:$H2DRIVERS:$CLASSPATH"org.h2.tools.Server -tcpAllowOthers-webAllowOthers-webPort8082"$@"

3).说明:

org.h2.tools.Server: 以服务器模式启动;

-tcpAllowOthers: 允许远程机器通过TCP方式访问;

-webAllowOthers: 允许远程机器通过浏览器访问;

-webPort 8082: 默认的访问端口(8082为未被占用的端口,如果此端口已经被其他端口占用,则改为其他端口);


4).具体的运行方式:

chmod修改文件权限;

输入nohup ./h2_server.sh & 回车,这样可以后台运行;

nohup 命令可以在我们退出账户之后继续运行相应的进程,nohup 就是不挂起的意思(no hang up),& 表示让该进程实现后台运行,该命令的一般形式为:

# nohup command &

5. 创建h2数据库

5.1 创建数据库

我们可以在windows窗口右下角,右键点击H2控制台的图标,选择”Create a new database...“,创建一个新的数据库。

然后进入到控制台设置界面,设置数据库的存放路径,访问的用户名和密码,然后创建出数据库。

设置url,用户名密码,然后点击连接或者测试连接,登录进去。

注:

"~" 这个符号在window操作系统下代表当前登录到操作系统的用户对应的用户目录,与 Linux 系统中的意义相同,代表用户家目录。

5.2 数据库配置

我们也可以点击”配置“按钮,进入到H2的配置界面,这里可以设置端口号等信息;
点击”工具“,可以对H2数据库进行备份、还原、恢复、集群、运行脚本、删除文件等操作。

5.3 进入到数据库管理界面

当我们点击H2的”连接“按钮,当用户名密码正确的情况下,就可以成功地进入到H2的web控制台界面。

这样我就把H2数据库安装配置完毕了,接下来我们就可以利用H2数据库进行Demo编写了。

三. 附录

以下表格中是H2 数据库不同模式的连接字串,各位可以参考。

结语

这样我就把H2数据库安装配置完毕了,接下来我们就可以利用H2数据库进行Demo编写了。请期待下一篇文章,壹哥 会教你在SpringBoot中利用H2进行数据库操作。

相关文章
|
2月前
|
监控 Java 应用服务中间件
达梦数据库DEM监控部署教程分享
达梦数据库DEM监控部署教程分享
57 2
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
9天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
22小时前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
2月前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
50 0
【教程】navicat配合HTTP通道远程连接SQLite数据库
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js技术栈的高校选课管理系统的设计与实现。该系统采用前后端分离架构,旨在提高选课效率、优化资源分配及提升用户体验。技术栈包括:后端Spring Boot 2.0、前端Vue 2.0、数据库MySQL 8.0、开发环境JDK 1.8和Maven 3.6等。系统功能覆盖登录、学生信息管理、选课管理、成绩查询等多个方面,并针对学生、教师和管理员提供了不同的操作界面。系统采用了响应式设计,支持多设备访问,并通过Element UI增强了界面的友好性和交互性。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
|
2月前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
9天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
31 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
9天前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
49 1
下一篇
无影云桌面