准备工作

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. 登陆整合实现-QQ互联认证(ASP.NET版本)

    原文:登陆整合实现-QQ互联认证(ASP.NET版本) 首先 我们创建一个qq.ashx的页面,这个页面会跳转到QQ的请求界面 代码如下: QQSettingConfig qqSettingConfi ...

  2. 快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me)

    快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me) 陈丹 (cd**@kuaidadi.com) 01-18 发布了内推 #年前面试 年后入职#架构师 • ...

  3. BZOJ 3373: [Usaco2004 Mar]Lying Livestock 说谎的牲畜( 差分约束 )

    枚举每头牛, 假设它在说谎, 建图判圈就行了...为啥水题都没人来写.. --------------------------------------------------------------- ...

  4. C#反射 入门学习 01

    前言     获取方法的相关信息的两种形式 反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象: 在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法 ...

  5. Javascript DOM 02 在<ul>中创建、删除 <li>

    创建DOM元素 createElement(标签名)  创建一个节点 appendChild(节点)  追加一个节点 例子:为ul插入li 插入元素 insertBefore(节点, 原有节点)  在 ...

  6. 高级UIKit-02(文件操作)

    [day3_1_Sandbox]:沙箱的介绍 snadbox沙箱沙盒 沙箱根目录下的几个文件夹: 1.应用名称.app存放应用程序的素材 2.Documents:存放应用运行时需要用到的数据(关键性数 ...

  7. TCP三四次握手

    通俗点说: 三次握手: A:发送连接请求 B:收到请求后,B知道自己的接收端是好的,返回给A请求的应答,并询问A是否收到自己的本次应答. A:收到B的应答.A知道自己的发送端和接收端都是好的.然后发送 ...

  8. QPointer更安全,QScopedPointer自动出范围就删除,QSharedDataPointer帮助实现隐式共享

    http://blog.csdn.net/hai200501019/article/details/8474582http://blog.csdn.net/hai200501019/article/d ...

  9. JVM调优总结(四)-垃圾回收面临的问题

    如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断.垃圾回收程序收集计数为0的对象即可.但是这种方法无法解决循环引用.所以,后来实现的垃圾判断算法中,都是从程序运行 ...

  10. c语言数组初始化问题

    2147483648字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10 ...