Java使用H2数据库全方式汇总

H2是轻量级数据库, 可以不需要安装就可以运行,对于快速学习和演示比较适用。关于H2的基本内容可以参考: H2 数据库简介 。 本篇快速介绍H2数据库在各种类型的Java应用中的使用, 包括:

  1. Java 项目
  2. Java Web 项目
  3. Spring Boot项目

本篇基本环境

  • Java 1.8
  • Maven 3.8
  • Eclipse 2022-09 (4.25.0)
  • H2 2.1.214

1. Java项目使用H2

在Java项目中只需要导入H2 的依赖包就可以使用H2数据库了。以Maven为例,在pom.xml 添加如下依赖:

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>2.1.214</version>
		</dependency>

添加之后, 就可以使用Java的sql 相关的类进行访问了。看起来上面的导入类似于MySQL和Oracle 的JDBC的驱动, 但其实这个库文件除了驱动类之外还包含了更多的内容,其相当于安装数据库。

数据库链接的代码如下:

		Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "sa");
		conn.close();
  • jdbc:h2:~/test , 这个是数据库的地址,~/test意思是在用户主目录下的test 的数据库。在电脑的用户主目录下会产生如下文件:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYWbf476-1670749686705)(images/screenshot_1670741925131.png)]
    产生的数据表和数据会保存在这些文件中。
  • 在2.1.214版本中, sa账号的密码是sa,在1.x 版本中, sa的密码为空。

使用java sql 创建数据库、插入数据以及查询数据的代码如下:

		Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "sa");
		Statement stmt = conn.createStatement();
		stmt.execute("DROP TABLE MY_USER"); //删除已经存在的表
		stmt.execute("CREATE TABLE MY_USER(ID VARCHAR(10) PRIMARY KEY,NAME VARCHAR(50))"); //创建表
		stmt.executeUpdate("INSERT INTO MY_USER VALUES('001','刘备')"); //插入数据
		stmt.executeUpdate("INSERT INTO MY_USER VALUES('002','关羽')");
		stmt.executeUpdate("INSERT INTO MY_USER VALUES('003','张飞')");
		
		ResultSet rs = stmt.executeQuery("SELECT NAME FROM MY_USER WHERE ID='001'"); //查询
        while(rs.next()){ 
            String name = rs.getString("NAME");
            Assertions.assertTrue(name.equals("刘备"));
        }
        rs.close();
        stmt.close();
		conn.close();
  • USER 表名是系统表,如果创建该名字的表会报错误 :org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE [*]USER(ID VARCHAR(10) PRIMARY KEY,NAME VARCHAR(50))"; expected "identifier"; SQL statement: 。 所以这里使用MY_USER,也可以使用USR。
  • 配置 jdbc:h2:~/test地址, 被创建的表会保存在用户主目录中,如果再次创建会报已经存在。
H2管理控制台

MySQL 可以使用MySQL workbench 工具连接数据库进行可视化操作, Oracle 可以使用SQL Develop客户端工具,那么H2 怎么可视化的连接数据库呢? 命令行切换到h2 的jar 文件目录,通过java命令直接运行这个文件,运行后会自动打开一个网址, 如下图:
在这里插入图片描述

登录之后就可以在浏览器中进行数据库相关的操作了
在这里插入图片描述

**注意: ** 通过java 运行jar文件是启动数据库并且提供管理控制台, 上面代码的方式连接数据库也是会先启动数据库。两者都会启动数据库,所以只能同一时刻只能运行一个,运行的一个会把数据库文件锁定, 另一个使用会报已经在使用的错误。

2. Java Web项目使用H2

Java Web 项目使用H2可以在 web.xml 做如下配置:

	<listener>
		<listener-class>org.h2.server.web.DbStarter</listener-class>
	</listener>
	<servlet>
		<servlet-name>H2Console</servlet-name>
		<servlet-class>org.h2.server.web.WebServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>H2Console</servlet-name>
		<url-pattern>/console/*</url-pattern>
	</servlet-mapping>
  1. 配置一个监听器, 在Web项目启动的时候启动H2数据库
  2. 配置H2控制台的Servlet,通过Sevlet 可以管理数据库。

示例项目可以参考: Java Servlet + H2数据库之集成环境配置

3. Spring Boot 项目使用H2

Spring Boot很好的兼容了H2数据库, 只要在应用的配置文件添加H2相关的配置即可, 类似:

##H2 Database
#1.数据源的平台
spring.datasource.platform=h2  
#2.数据源驱动类
spring.datasource.driver-class-name=org.h2.Driver
#3.数据源地址。mem代表Memory,内存数据库。myh2是数据库的名字,可以任取。
spring.datasource.url=jdbc:h2:mem:myh2 

完整的介绍可以参考:
Spring Boot整合H2内存数据库配置及常见问题处理



### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值