【H2Database】通过官方文档学习 H2 数据库,从了解到实践


概述

→点击这里,进入 H2 官网链接
H2 数据库是一个 Java 开发的嵌入式数据库,它本身就是一个 jar 包,可以直接嵌入到应用项目中。
官网给出了主要特点有:
▷ 速度快
▷ 开源
▷ 支持 JDBC API
▷ 拥有嵌入式模式服务器模式
▷ 内存存储的数据库
▷ 拥有基于浏览器的控制台应用程序
▷ 占用空间小:大概 2MB 左右的 jar 包文件


下载安装

1. 下载

H2 下载地址:https://h2database.com/html/download.html
进入到下载页面,最顶端为最新版本的下载链接,分为 Windows 系统和其他系统,其他系统为 zip 包。我的是 Mac 系统,下载了 zip 包来用。
在这里插入图片描述

2. 安装

下载完成后直接用 unzip 命令解压即可。解压后的目录如下图
在这里插入图片描述

目录内容
binjar 包和批处理文件
docs文档
docs/htmlhtml 页
docs/javadocjava 文档
service将数据库作为 Windows 服务运行的工具
src源码文件
src/docsrc源码文档
src/installerinstaller,shell 和 release build 脚本
src/main数据库引擎源码
src/test测试源码
src/tools工具和数据库适配器源代码

3. 启动

bin 目录下直接运行 jave -jar h2*.jar 即可

4. 测试

1.进入到 http://localhost:8082 页面,浏览器控制台支持中文,我这里选择了中文。H2 数据库有两种模式,内嵌式(Embedded)和服务器式(Server)。
内嵌式有两种模式,一种数据是非持久化的,数据只支持在当前窗口进行操作,操作完成退出窗口后,所有数据不作改变,一般测试环境使用,URL 为 jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1;另一种是持久化的,数据会落地到指定目录,比如 URL 可以写成 jdbc:h2:./test
服务器式的 URL 是指定一个 TCP 的远程目录,比如 jdbc:h2:tcp://localhost/~/test
在这里插入图片描述
2.点击框选区域,可以生成样例 SQL 模板,可以直接点击执行按钮执行,也可以使用 Ctrl + Enter 执行,Shift + Enter 可以执行选中的 SQL 语句。
在这里插入图片描述
3.执行完成后,左侧为当前表格的目录,下方为运行结果。
在这里插入图片描述


JDBC 实践

1. 导包

<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

2. 代码

import com.oracle.tools.packager.Log;

import java.sql.*;
import java.util.logging.Logger;

/** FileName: H2Client Author: zhaozhuang Date: 2021/1/26 上午11:01 Description: */
public class H2Client {
  // 内嵌非持久化模式
  private static final String embeddedTmpUrl = "jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1";
  // 内线持久化模式
  private static final String embeddedPersistentUrl = "jdbc:h2:./test";
  // 服务式模式
  private static final String serverUrl = "jdbc:h2:tcp://localhost/~/test";

  // 用户名
  private static final String user = "sa";
  // 密码(h2 数据库默认为空)
  private static final String password = "";
  // 驱动类
  private static final String driverClass = "org.h2.Driver";

  private static Connection connection;

  private static Statement statement;

  public static void main(String[] args) throws SQLException, ClassNotFoundException {
      // 获取 H2 数据库的连接池
      getConnection();

      drop();
      create();
      insert();
      select();
      update();
      delete();
      close();
  }

  /**
   * 获取 H2 数据库的连接池
   *
   * @throws SQLException
   */
  public static void getConnection() throws SQLException, ClassNotFoundException {
    connection = DriverManager.getConnection(embeddedTmpUrl, user, password);
  }

  /**
   * 删除表
   *
   * @throws SQLException
   */
  public static void drop() throws SQLException {
    // 删除表
    String drop = "DROP TABLE IF EXISTS TEST";
    statement = connection.createStatement();
    statement.execute(drop);

  }

  /**
   * 创建表
   *
   * @throws SQLException
   */
  public static void create() throws SQLException {
    // 创建表
    String create = "CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))";
    statement = connection.createStatement();
    statement.execute(create);
  }

  /**
   * 插入数据
   *
   * @throws SQLException
   */
  public static void insert() throws SQLException {
    // 插入数据
    String insertHello = "INSERT INTO TEST VALUES(1, 'Hello')";
    String insertWorld = "INSERT INTO TEST VALUES(2, 'World')";

    statement = connection.createStatement();
    statement.execute(insertHello);
    statement.execute(insertWorld);
  }

  /**
   * 查询数据
   *
   * @throws SQLException
   */
  public static void select() throws SQLException {
    // 查询数据
    String select = "SELECT * FROM TEST ORDER BY ID";

    PreparedStatement ps = connection.prepareStatement(select);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
      int id = rs.getInt("id");
      String name = rs.getString("name");
      System.out.printf("id: [%s], name: [%s]\n", id, name);
    }
  }

  /**
   * 更新数据
   *
   * @throws SQLException
   */
  public static void update() throws SQLException {
    // 更新数据
    String update = "UPDATE TEST SET NAME='Hi' WHERE ID=1";

    statement = connection.createStatement();
    int i = statement.executeUpdate(update);
    System.out.printf("Updated data counts: [%s]\n",i);
  }

    /**
     * 删除数据
     * @throws SQLException
     */
  public static void delete() throws SQLException {
    // 删除数据
    String delete = "DELETE FROM TEST WHERE ID=2";

    statement = connection.createStatement();
    int i = statement.executeUpdate(delete);
    System.out.printf("Deleted data counts: [%s]\n",i);
  }

  public static void close() throws SQLException {
      if (statement != null){
          statement.close();
      }
      if (connection != null){
          connection.close();
      }
  }
}

控制台:
0
id: [1], name: [Hello]
id: [2], name: [World]
Updated data counts: [1]Deleted data counts: [1]
Process finished with exit code 0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值