准备工作

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

2、下载并解压:h2-2014-07-13.zip  官网下载地址:http://www.h2database.com/html/main.html

3、环境变量设置H2_HOME。

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

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

jsessionid=244e36a683f97f0d4f3b000f33530ed1" target="_blank" style="margin:0px; padding:0px; border:0px currentColor; color:rgb(51,51,51); vertical-align:baseline">http://localhost:8082/login.jsp?jsessionid=244e36a683f97f0d4f3b000f33530ed1

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 URL:jdbc:h2:E:\research\workspace\H2Test\db\test。然后运行上面的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/IP的服务器模式(远程连接)

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

jdbc:h2:tcp://localhost/~/test

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

使用SSL/TLS的server模式(远程连接)

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

username与password

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

H2内存数据库 支持存储到文件的更多相关文章

  1. H2内存数据库支持存储到文件

    准备工作 1.下载JDK(本人下载的版本为JDK1.7).设置环境变量JAVA_HOME,设置PATH(%JAVA_HOME%\bin%). 2.下载并解压:h2-2014-07-13.zip 官网下 ...

  2. 在Spring Boot使用H2内存数据库

    文章目录 添加依赖配置 数据库配置 添加初始数据 访问H2数据库 在Spring Boot使用H2内存数据库 在之前的文章中我们有提到在Spring Boot中使用H2内存数据库方便开发和测试.本文我 ...

  3. Android_存储之文件存储

    前面几篇随笔 讲到的关于存储的,SharedPreferences.Room.数据库等 最终都是以文件形式 存储到手机上的(除特殊的存储于手机内存的:如Room可以创建内存数据库). 这些存储方式,A ...

  4. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  5. BAE3.0还不支持本地写入文件

    BAE3.0对比2.0做了很大的改动,对于安装应用方面也方便了很多,普通的应用表面上(下文就是讲为什么说表面上)不需要做什么适配.比如wp博客,直接修改wp-config.php,把数据库信息填一下就 ...

  6. LabVIEW(四):数据存储和文件IO

    1.使用NI数据采集板卡来进行数据保存和文件I/O操作.2.在一个典型的测试测量系统当中,包括:信号调理.信号采集.信号分析.信号显示.数据存储.数据存储:将采集到的数据储存到磁盘上,以备日后离线分析 ...

  7. 如何利用Hadoop存储小文件

    **************************************************************************************************** ...

  8. nodejs项目mysql使用sequelize支持存储emoji

    nodejs项目mysql使用sequelize支持存储emoji 本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情. 因由 最近项目遇到用户在文本输入emoji进行存储的时候导 ...

  9. iOS开发查看手机app本地存储的文件

    开发过程中,有时会在本地存储一些文件,但是我们不确定有没有存上,可以通过以下方法来查看测试手机上本地存储的文件: 1.选择xcode上面的window下面的Devices 2.先在左边选中你当前的设备 ...

随机推荐

  1. KVM客户机使用主机USB设备

    有些时候KVM客户机还是要使用USB设备,比如USB密钥等 KVM命令行参数 -usb 打开usb驱动程序,启动客户机usb支持 -usbdevice devname 为客户机增加usb设备,devn ...

  2. Android性能检测--traceview工具各个参数的意思

    Android性能检测 traceview的使用方法 1. 把android-sdk-windows\tools路径加到Path当中 2. 编写测试代码: package com.wwj.tracev ...

  3. PHP - 防止 XSS(跨站脚本攻击)

    <?PHP /** * @blog http://www.phpddt.com * @param $string * @param $low 安全别级低 */ function clean_xs ...

  4. 使用gettimeofday测试函数运行的时间

    #include <time.h> #include <stdio.h> #include<sys/time.h> #define NEW_TIME_VALE st ...

  5. BZOJ 2427: [HAOI2010]软件安装( dp )

    软件构成了一些树和一些环, 对于环我们要不不选, 要么选整个环. 跑tarjan缩点后, 新建个root, 往每个入度为0的点(强连通分量) 连边, 然后跑树dp( 01背包 ) ---------- ...

  6. 03-UIKit、VC之间正向反向传值、代理

    目录: 一.正向传值 二.反向传值 三.代理模式 回到顶部 正向传值:就是把第一个界面的值传给第二个界面显示,其简单实现方法 1 首先在第一个界面中要有一个textField输入框,一个按钮butto ...

  7. VS2013 Qt5 Mysql中文编码问题

    Qt开始默认是utf-8,而VS2013默认程序编码为gb2312: 这样就会发现使用中文的时候乱码. 一般有二种解决方案: 1.在使用中文的时候,使用QTextCodec QTextCodec *g ...

  8. Creating Spatial Indexes(mysql 创建空间索引 The used table type doesn't support SPATIAL indexes)

    For MyISAM tables, MySQL can create spatial indexes using syntax similar to that for creating regula ...

  9. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...

  10. C++中实现 time_t, tm 相互转换

    time_t -> tm: localtime tm -> time_t: mktime time_t curTime; time(&curTime); dwCurTime = c ...