博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
H2内存数据库 支持存储到文件
阅读量:5805 次
发布时间:2019-06-18

本文共 5863 字,大约阅读时间需要 19 分钟。



准备工作

1、下载JDK(本人下载的版本号为JDK1.7)、环境变量设置JAVA_HOME。设置PATH(%JAVA_HOME%\bin%)。

2、下载并解压:h2-2014-07-13.zip  官网下载地址:
3、环境变量设置H2_HOME。

%H2_HOME%表示为解压的文件文件夹。执行%H2_HOME%\bin\h2.bat 将会自己主动打开以下网址。

(请确认是否安装了jdk,并设置了JAVA_HOME环境变量)

3、点击 connect ,登录。

4、运行上图中红色部分sql语句,成功创建test表。

由于没有指定数据库文件位置。会自己主动输出到输出到C:\Users\Administrator下。

H2文件结构

 

%H2_HOME%
-h2
  -bin
    h2-1.3.154.jar //jar包
    h2.bat         //Windows控制台启动脚本
    h2.sh          //Linux控制台启动脚本
    h2w.bat        //Windows控制台启动脚本(不带黑屏窗体)
  +docs 帮助文档
  +service //通过wrapper包装成服务。
  +src  //源码
  build.bat  windows构建脚本
  build.sh   linux构建脚本

H2的使用

支持Embedded。server和in-memory模式以及内存模式。
Embedded模式

1、新建java project工程 H2Test。

 

2、%H2_HOME%\bin\h2-1.3.154.jar 拷贝到 \H2Test\lib下。并增加project引用。

3、新建Generic H2 (Embedded)数据库。指定:JDBC 。然后运行上面的test sql语句,来创建一个test表。

4、新建 TestH2类 主要代码

public static void main(String[] a)

      throws Exception {
   Class.forName("org.h2.Driver");
   Connection conn = DriverManager.
       getConnection("jdbc:h2:E:\\research\\workspace\\H2Test\\db\\test", "sa", "");
   // add application code here
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("SELECT * FROM TEST ");   
      while(rs.next()) {   
       System.out.println(rs.getInt("ID")+","+rs.getString("NAME"));
      }
   conn.close();
 }

 

控制台打印出:1,Hi

server模式

1、直接将jdbc url 改为:jdbc:h2:tcp://localhost/~/test  即可了。由于我们在上面第一步的时候已经在C:\Users\Administrator创建了test数据库。

你也能够再创建新的数据库,默认都是保存在C:\Users\Administrator下的。
注意:你必须启动服务:%H2_HOME%\bin\h2.bat 或者 以服务模式启动:%H2_HOME%\service\0_run_server_debug.bat ,里面有好几个脚本把H2部署为服务模式。每次机器启动后自己主动启动H2服务。

2、新建 TestServerH2类 主要代码

public static void main(String[] a)

    throws Exception {
   Class.forName("org.h2.Driver");
   Connection conn = DriverManager.
       getConnection("jdbc:h2:tcp://localhost/~/test", "sa", "");
   // add application code here
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("SELECT * FROM TEST ");   
    while(rs.next()) {   
     System.out.println(rs.getInt("ID")+","+rs.getString("NAME"));
    }
   conn.close();
 }

执行的结果和上面一样。

内存模式(数据仅仅保存在内存中)

1、新建 TestMemH2类 主要代码

public static void main(String[] a)

    throws Exception {
   Class.forName("org.h2.Driver");
   Connection conn = DriverManager.
       getConnection("jdbc:h2:tcp://localhost/mem:test2", "sa", "");
   // add application code here
   Statement stmt = conn.createStatement();
  
   stmt.executeUpdate("CREATE TABLE TEST_MEM(ID INT PRIMARY KEY,NAME VARCHAR(255));");
   stmt.executeUpdate("INSERT INTO TEST_MEM VALUES(1, 'Hello_Mem');");
   ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_MEM");   
    while(rs.next()) {   
     System.out.println(rs.getInt("ID")+","+rs.getString("NAME"));
    }
   conn.close();
 }

控制台打印出:1,Hello_Mem

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

集群 / 高可用性

数据库支持简单的集群/高可用性机制。架构是:两个数据库服务执行在两台不同的计算机上,两台计算机有相同数据库的副本,假设两个server都处于执行状态,每一个数据库操作都被在两台计算机上执行,假设一台server宕机(断电、硬件故障、网络故障等),另外一台计算机仍能提供服务,从这一刻開始,数据库操作仅在一台server上执行,直到另外一台server恢复执行。

集群仅能用于server模式(内嵌模式并不支持集群)。能够在数据库执行状态下恢复集群。可是要求在第二个数据库恢复期间没有应用在改变第一个数据库的数据,因此恢复集群是一个手工的过程。

初始化集群,使用以下的步骤:

·        创建数据库

·        使用CreateCluster工具创建一个数据库福分到另外的地方,而且初始化集群,这样就得到了相同数据的两个数据库

·        启动两个数据库服务(每一个数据库的副本)

·        如今能够通过应用client连接到数据库

使用创建集群工具

要了解集群怎样工作,请尝试以下的样例,在这个样例里,两个数据库驻留在同一台计算机上,但通常,两个数据库在不同的计算机上。

·        创建两个文件夹:server1,server2。

每一个文件夹将模拟一台计算机

·        在第一个文件夹启动TCP服务。你能够执行以下的命令:

·        java org.h2.tools.Server

·            -tcp-tcpPort 9101

·            -baseDirserver1

·        在第二个文件夹启动TCP服务,模拟第二个server(冗余执行),你能使用以下的命令:

·        java org.h2.tools.Server

·            -tcp-tcpPort 9102

·            -baseDirserver2

·        使用 CreateCluster 工具初始化集群,假设数据库不存在。将创建一个新的空数据库。执行以下命令行:

·        java org.h2.tools.CreateCluster

·            -urlSourcejdbc:h2:tcp://localhost:9101/~/test

·            -urlTargetjdbc:h2:tcp://localhost:9102/~/test

·            -user sa

·            -serverList localhost:9101,localhost:9102

·        应用或者是H2控制台能够通过以下的JDBC的URL连接数据库:jdbc:h2:tcp://localhost:9101,localhost:9102/~/test

·        假设你停止一个服务(通过杀进程),你注意到还有一个机器继续工作,数据库仍能提供訪问。

·        恢复集群。你须要先删掉宕机的数据库。然后重新启动宕机的数据库的服务,再又一次执行CreateCluster集群工具。

检測执行状态下的集群

查找哪些节点当前正在执行。通过执行以下的SQL语句:

SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERENAME='CLUSTER'

结果返回为 '' (两个单引號),说明集群模式被屏蔽,否则,集群服务器列表将被单引號包含着返回。如'server1:9191,server2:9191'。

2、上面的 URL 改为 jdbc:h2:~/mem:test 也是能够的。假设是localhost必须启动服务。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

数据库连接 URL说明

数据库支持多种连接模式和连接设置,不同的连接模式和连接设置是通过不同的URL来区分的,URL中的设置是不区分大写和小写。

Topic

URL Format and Examples

jdbc:h2:[file:][<path>]<databaseName>

jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)

jdbc:h2:mem:

jdbc:h2:mem:<databaseName>

jdbc:h2:mem:test_mem

TCP/I

 

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>

jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample

 

jdbc:h2:ssl://<server>[:<port>]/<databaseName>

jdbc:h2:ssl://secureserv:8085/~/sample;

jdbc:h2:<url>;CIPHER=[AES|XTEA]

jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=XTEA

jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET}

jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO
jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET

jdbc:h2:<url>;IFEXISTS=TRUE

jdbc:h2:file:~/sample;IFEXISTS=TRUE

jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE

jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]

jdbc:h2:file:~/sample;USER=sa;PASSWORD=123

jdbc:h2:<url>;LOG=2

jdbc:h2:file:~/sample;LOG=2

jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>

jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3

jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE

jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws

Zip文件里的数据库

jdbc:h2:zip:<zipFileName>!/<databaseName>

jdbc:h2:zip:~/db.zip!/test

jdbc:h2:<url>;MODE=<databaseType>

jdbc:h2:~/test;MODE=MYSQL

jdbc:h2:<url>;AUTO_RECONNECT=TRUE

jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE

jdbc:h2:<url>;AUTO_SERVER=TRUE

jdbc:h2:~/test;AUTO_SERVER=TRUE

jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]

jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3

转载地址:http://arkbx.baihongyu.com/

你可能感兴趣的文章
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
【安全牛学习笔记】提权
查看>>
HCNA——RIP的路由汇总
查看>>
网络地址转换——NAT
查看>>
老男孩LIUNX36期学员-方秀升决心书
查看>>
详解JS对象
查看>>
Python--字符串
查看>>
SAMBA不需要密码的文件共享、网站别名访问、密码类提示的访问
查看>>
查询索引数据的核心API
查看>>
Linux20180415 三周第二次课(4月3日)
查看>>
js数组排序
查看>>
Django 模型类—查询
查看>>
XHR 的用法
查看>>
JEPLUS表格组件数据平铺——JEPLUS软件快速开发平台
查看>>
CompeletableFuture的使用
查看>>
阿里云互动课堂解决方案助力淘宝教育,打造普惠教育平台
查看>>
阿里云总监课第四期,时髦的云原生应用怎么写?
查看>>
canvas 添加图片
查看>>