H2内嵌数据库的使用

news/2025/1/16 1:35:33/

文章目录

    • @[toc]
    • H2内嵌数据库的使用
      • 运行方式
      • JDBC URL
    • Java应用中的使用
      • 操作实例
    • Java web 应用中的使用
      • H2服务的启动
        • 1.命令行启动服务
        • 2.Servlet的方式
        • 3.maven插件方式
      • 数据库初始化
        • 1.maven方式
        • 2.spring方式
    • 项目路径

H2内嵌数据库的使用

H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制。

同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。

H2还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为开发期的数据库非常方便。

H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分。

运行方式

H2数据库有三种运行方式实现:

  1. 嵌入式(embedded):可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据
  2. 服务模式:
    1.TCP/IP server:支持客户端/服务器端的连接方式
    2.web server:此种运行方式支持使用浏览器访问H2 Console
    3.PG server:支持PostgreSQL客户端
  3. 内存方式:可以作为缓存,作为NoSQL的一个补充。
    当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。

JDBC URL

1、内嵌模式不用启动服务,已内嵌,不用显示启动服务

String jdbcURL = "jdbc:h2:~/h2/db";

2、TCP/IP server 服务器模式,必须要显示启动服务

String jdbcURL = "jdbc:h2:tcp://localhost/~/h2/db";

3、内存模式

String jdbcURL = "jdbc:h2:mem:h2db";// 或者String jdbcURL = "jdbc:h2:tcp://localhost/mem:h2db";

Java应用中的使用

操作实例

H2数据库基本操作:

// ~ 用户目录C:\Users\用户名\
String jdbcURL = "不同模式下,不同的jdbcURL,其他操作一样";//连接数据库时使用的用户名
final String user = "tianya";//连接数据库时使用的密码
String password = "123456";//连接H2数据库时使用的驱动类
//org.h2.Driver 
String driverClass="org.h2.Driver";try {// 1、加载驱动Class.forName(driverClass);// 2、获取连接Connection connection = DriverManager.getConnection(jdbcURL, user, password);Statement statement = connection.createStatement();// 3、执行操作// 3.1、先删除表,若存在statement.execute("drop table user_info if exists ");// 3.2、创建表statement.execute("create table user_info(id int primary key, name varchar(10), age int , sex varchar(2) )");// 4、新增statement.executeUpdate("insert into user_info(id,name,age,sex) values(1,'张三',23,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(2,'李四',25,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(3,'王五',33,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(4,'珠帘',23,'女' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(5,'鲤鱼',20,'女' )");// 5、查询ResultSet rs = statement.executeQuery("select * from user_info");while (rs.next()) {System.out.println(rs.getInt(1) + " - " + rs.getString(2) + " - " + rs.getInt(3)+ " - " + rs.getString(4) );}// 释放资源statement.close();connection.close();} catch (Exception e) {e.printStackTrace();
}

Java web 应用中的使用

H2服务的启动

1.命令行启动服务

java -cp h2*.jar org.h2.tools.Server -?常见的选项如下:-web:启动支持H2 Console的服务
-webPort <port>:服务启动端口,默认为8082
-browser:启动H2 Console web管理页面
-tcp:使用TCP server模式启动
-pg:使用PG server模式启动

如:

## 浏览器web服务方式
java -jar h2*.jar org.h2.tools.Server -web -webPort 8082 -browser ## TCP服务方式
java -jar h2*.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpSSL 

2.Servlet的方式

注解的方式

package com.tianya.mw.web;import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.annotation.WebListener;import org.apache.log4j.Logger;
import org.h2.server.web.WebServlet;
import org.h2.tools.Server;/*** Copyright: Copyright (c) 2019 tianwyam* * @ClassName: H2DBServerListener.java* @Description: 在WEB应用中启动H2数据库服务的监听器* @version: v1.0.0* @author: tianwyam* @date: 2019年3月18日 上午9:56:21*/
@WebListener
public class H2DBServerListener implements ServletContextListener {private transient static final Logger log = Logger.getLogger(H2DBServerListener.class);// H2 DB 服务private Server server;// H2 tcp访问的端口public static final int H2_DB_SERVER_PORT = 8082 ;@Overridepublic void contextInitialized(ServletContextEvent event) {try {// 启动H2数据库服务log.info("启动H2数据库...");log.info(String.format("TCP客户端访问端口:%s", H2_DB_SERVER_PORT));// 默认端口为8082server = Server.createTcpServer("-tcpPort", String.valueOf(H2_DB_SERVER_PORT), "-tcpAllowOthers").start();log.info("H2数据库启动成功...");// 注解方式 添加 H2 DB console 访问 WebServlet// 注册 H2数据库 web 控制台  // 添加 org.h2.server.web.WebServletServletContext servletContext = event.getServletContext();Dynamic webServlet = servletContext.addServlet("H2Console", WebServlet.class);// 控制台 访问路径webServlet.addMapping("/console/*");webServlet.setLoadOnStartup(1);// 设置配置Map<String, String> initParameters = new HashMap<>();initParameters.put("allowOthers", "true");initParameters.put("trace", "true");webServlet.setInitParameters(initParameters);log.info("H2 CONSOLE 默认访问URL:http://localhost:8080/[project_name]/console/");} catch (SQLException e) {log.error("H2数据库启动失败!", e);}}@Overridepublic void contextDestroyed(ServletContextEvent event) {// 停止服务if (server != null) {log.info("关闭H2数据库...");server.shutdown();log.info("关闭H2数据库成功...");}}}

web.xml配置方式

<!-- 注册服务监听 -->
<listener><listener-class>com.tianya.mw.web.H2DBServerListener</listener-class>
</listener><!-- 使用H2控制台的Servlet H2控制台是一个独立的应用程序,
包括它自己的Web服务器,但它可以作为一个servlet作为-->
<servlet><servlet-name>H2Console</servlet-name><servlet-class>org.h2.server.web.WebServlet</servlet-class><init-param><param-name>webAllowOthers</param-name><param-value></param-value></init-param><init-param><param-name>trace</param-name><param-value></param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><!-- 映射H2控制台的访问路径 -->
<servlet-mapping><servlet-name>H2Console</servlet-name><url-pattern>/console/*</url-pattern>
</servlet-mapping>

访问 查看是否服务启动成功

http://localhost:8080/[project_name]/console/

3.maven插件方式

<build><finalName>LearnH2DB</finalName><!-- maven插件方式启动 H2 DB 服务 --><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><executions><execution><goals><goal>java</goal></goals></execution></executions><configuration><mainClass>org.h2.tools.Server</mainClass><arguments><argument>-web</argument><argument>-webPort</argument><argument>8082</argument><argument>-browser</argument></arguments></configuration></plugin></plugins></build>

执行命令

mvn exec:java

相当于

java -jar h2*.jar org.h2.tools.Server -web -webPort 8082 -browser

数据库初始化

1.maven方式

<!-- 初始化 配置  -->
<profiles><profile><id>init-db</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.8</version><configuration><target><property file="src/main/resources/h2_jdbc.properties" /><sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}"password="${jdbc.password}" onerror="continue"encoding="${project.build.sourceEncoding}"><classpath refid="maven.test.classpath" /><transaction src="src/main/resources/sql/h2/schema.sql" /><transaction src="src/main/resources/sql/h2/data.sql" /></sql></target></configuration></plugin></plugins></build></profile>
</profiles>

执行命令:

mvn antrun:run -P init-db

2.spring方式

<beans profile="test"><context:property-placeholder ignore-resource-not-found="true"location="classpath*:/*_jdbc.properties" />    <!-- Spring Simple连接池 --><bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"><property name="driverClass" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!-- 初始化数据表结构 --><jdbc:initialize-database data-source="dataSource" ignore-failures="ALL"><jdbc:script location="classpath:sql/h2/schema.sql" /><jdbc:script location="classpath:sql/h2/data.sql" encoding="UTF-8"/></jdbc:initialize-database>
</beans>

项目路径

https://github.com/tianwyam/LearnProject/blob/master/LearnH2DB/README.md

刚开始写微信公众号,请多多关注,欢迎,多谢!
微信公众号:《Java学习积累》
微信公众号:Java学习积累


http://www.ppmy.cn/news/341413.html

相关文章

wx2540h配置教程_H3C wx3000系列配置

配置举例 3.1 组网需求 Ap---------3024----------- 三层设备 3.3 配置步骤 3.3.1 配置 AC 1. 主要配置步骤 (1) 配置 AC 的地址 system-view [AC]interface vlan 1 //ap 管理地址网关 [AC-Vlan-interface1]ip address 192.168.0.1 24 [AC-Vlan-interface1]quit [AC]vlan 10…

HBase(3):HBase Shell 操作

目录 0. 相关文章链接 1. 基本操作 2. namespace 3. DDL 3.1. 创建表 3.2. 查看表 3.3. 修改表 3.4. 删除表 4. DML 4.1. 写入数据 4.2. 读取数据 4.3. 删除数据 0. 相关文章链接 HBase文章汇总 1. 基本操作 1&#xff09; 进入 HBase 客户端命令行 bin/hbase s…

HW3000无线芯片模块

HW3000超低双向无线fsk模块完美替代CC1101、CC1120、A7139、A7108、si4432、si4438、si4463 转载于:https://my.oschina.net/u/2970238/blog/761348

SV枚举类型转化、数组、字符串使用小结

目录 一、枚举类型转化 二、结构体 三、合并数组和非合并数组 1、非组合型 2、组合型 3、数组中数据查找 四、字符串string 五、关联数组 一、枚举类型转化 将1转换成枚举类型st2 state_t(1)&#xff0c;可以成功转换。 将4转换成枚举类型st2 state_t(4); 超出范围&a…

hbase HFile V3介绍

HBase 0.98开始增加了对cell tags的支持&#xff0c;所以其HFile结构也发生了改变。HFile V3的格式只是在V2格式后增加了标签部分。其他保持不变&#xff0c;所以对V2保持了兼容性。用户可以从V2直接切换到V3。 HFile V3主要的提高是压缩比和&#xff0c;通过把key放在一起 Val…

H3C UniServer R6900 G3 服务器介绍

一、H3C UniServer R6900 G3服务器产品概述 全新H3C UniServer R6900 G3服务器产品家族 H3C UniServer R6900 G3服务器介绍&#xff1a; H3C R6900 G3机架式服务器是自主研发的&#xff0c;基于IntelXeonScalable Processor的新一代4U机架式服务器&#xff0c;可广泛应用于新…

每个DBA都应该知道:进行数据库优化的方法

优化操作数据库及其访问应用的性能是数据库管理员&#xff08;DBA&#xff09;持续进行的挑战。当然&#xff0c;编写高效的SQL是确保数据库优化性能的最重要方面&#xff0c;但是对SQL的调整或系统的调优都无法优化针对设计不良或组织混乱的数据库运行的查询的性能。因此&…

102. 二叉树的层序遍历

2023.6.12 思路就是用队列&#xff0c;保存完一层后&#xff0c;开始取出&#xff0c;取出一个保存它的值&#xff0c;然后把它的左右孩子添加到队列的尾部&#xff0c;这样当一层的值保存完后&#xff0c;其下一层的所有节点正好全部进入队列。 # Definition for a binary tr…