H2数据库使用
H2数据库使用
H2数据库介绍
H2的优势:
1、h2采用纯Java编写,因此不受平台的限制。
2、h2只有一个jar文件,十分适合作为嵌入式数据库试用。
3、性能和功能的优势
H2和各数据库特征比较。
准备工作
1、h2-2011-04-04.zip 下载地址:http://www.
2、解压文件,这里以%H2_HOME%表示为解压的文件目录。运行%H2_HOME%\bin\h2.bat 将会自动打开下面网址。(请确认是否安装了jdk,并设置了JAVA_HOME环境变量)
http://192.168.140.1:8082/login.jsp?jsessionid=244e36a683f97f0d4f3b000f33530ed1
3、点击 connect ,登录。
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模式
3、新建Generic H2 (Embedded)数据库,指定:URL:
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模式
jdbc url 改为:
你也可以再创建新的数据库,默认都是保存在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("
// 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();
}
内存模式(数据只保存在内存中)
public static void main(String[] a)
throws Exception {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("
// 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();
}
集群 / 高可用性
数据库支持简单的集群/高可用性机制。架构是:两个数据库服务运行在两台不同的计算机上,两台计算机有同样数据库的副本,如果两个服务器都处于运行状态,每个数据库操作都被在两台计算机上执行,如果一台服务器宕机(断电、硬件故障、网络故障等),另外一台计算机仍能提供服务,从这一刻开始,数据库操作仅在一台服务器上执行,直到另外一台服务器恢复运行。
集群仅能用于服务器模式(内嵌模式并不支持集群)。可以在数据库运行状态下恢复集群,但是要求在第二个数据库恢复期间没有应用在改变第一个数据库的数据,因此恢复集群是一个手工的过程。
初始化集群,使用下面的步骤:
· 创建数据库
· 使用CreateCluster工具创建一个数据库福分到另外的地方,并且初始化集群,这样就得到了同样数据的两个数据库
· 启动两个数据库服务(每个数据库的副本)
· 现在可以通过应用客户端连接到数据库
使用创建集群工具
要了解集群如何工作,请尝试下面的例子,在这个例子里,两个数据库驻留在同一台计算机上,但通常,两个数据库在不同的计算机上。
· 创建两个目录:server1,server2。每个目录将模拟一台计算机
· 在第一个目录启动TCP服务,你可以运行下面的命令:
· java org.h2.tools.Server
· -tcp-tcpPort 9101
· -baseDirserver1
· 在第二个目录启动TCP服务,模拟第二个服务器(冗余运行),你能使用下面的命令:
· 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'。
jdbc:h2:~/mem:test 也是可以的。如果是localhost必须启动服务。
数据库连接 URL说明
数据库支持多种连接模式和连接设置,不同的连接模式和连接设置是通过不同的URL来区分的,URL中的设置是不区分大小写。
Topic |
URL Format and Examples |
jdbc:h2:[file:][<path>]<databaseName> |
|
jdbc:h2:mem: |
|
jdbc:h2:mem:<databaseName> |
|
使用TCP/IP的服务器模式(远程连接) |
jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> |
jdbc:h2:ssl://<server>[:<port>]/<databaseName> |
|
jdbc:h2:<url>;CIPHER=[AES|XTEA] |
|
jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET} |
|
jdbc:h2:<url>;IFEXISTS=TRUE |
|
jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE |
|
jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>] |
|
jdbc:h2:<url>;LOG=2 |
|
jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..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:<url>;MODE=<databaseType> |
|
jdbc:h2:<url>;AUTO_RECONNECT=TRUE |
|
jdbc:h2:<url>;AUTO_SERVER=TRUE |
|
jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...] |
H2数据库使用的更多相关文章
- H2数据库攻略
H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容.H2还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为 ...
- 【树莓派】h2数据库操作相关
之前在树莓派上面操作时候,遇到一些业务方面的bug,和团队中的同事经过多次尝试,但就是难以重现用户现场的问题. 但是问题却实实在在地发生,虽然并不是必然可重现的bug,但是也比较闹心: 发生了问题,也 ...
- 使用H2数据库进行单元测试
背景 H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现: 程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中. 官网地址 http://www.h2databa ...
- java~springboot~h2数据库在单元测试中的使用
单元测试有几点要说的 事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下: 单 ...
- Confluence 6 嵌入的 H2 数据库
为了让你的 Confluence 在安装成功后就可以使用而不需要使用任何外部的数据库,Confluence 使用一个嵌入的 H2 数据库. 当你选择对 Confluence 进行评估和测试的时候,H2 ...
- Confluence 6 关于嵌入的 H2 数据库
你的 Confluence 安装中包含有嵌入的 H2 数据库,能够让你试用 Confluence 而不需要安装任何的外部数据库.H2 数据库仅仅用于你对 Confluence 进行评估.在你将 Con ...
- 使用h2数据库
h2数据库提供了一个简单的web管理界面 import org.h2.tools.Server; import org.slf4j.Logger; import org.slf4j.LoggerFac ...
- H2数据库
官网:http://www.h2database.com H2数据库默认的~/test数据库在Win10下所在的位置为 C:/Users/yourname/下,也就是执行cmd的第一个目录 其中的.h ...
- Spring Boot学习笔记:整合H2数据库
H2数据库:java语言编写的嵌入式sql数据库.可以和应用一起打包发布. H2有三种连接模式(Connection Modes): Embedded mode (local connections ...
- 查看Jira 使用的H2数据库 数据结构以及内容的方法
1. 同事在研究jira 想看看jira的数据库 数据结构, 告知使用的是java的H2数据库. 如图示 2. 然后根据此内容 进行百度等. 下载 可以进行数据库连接的工具,主要找到两个,下载地址分别 ...
随机推荐
- TeamViewer 软件完全卸载
TeamViewer 软件似乎用于商业环境中 - 彻底卸载 Windows 1. 检测为商业用途该软件似乎用于商业环境中.请注意:免费版仅供个人使用.您的会话将在 5 分钟后终止. 2.1 Close ...
- Linux 下安装使用 oh-my-zsh
Ubuntu 下安装 oh-my-zsh 安装 zsh sudo apt install zsh 安装 git(如果你的系统没有自带的话) sudo apt install git 安装 oh-my- ...
- May 2 2017 Week 18 Tuesday
The beauty of the journey is found in the scenery along the way. 旅行之美在于沿途所见的风景. Several years ago, I ...
- Selenium入门7 内嵌框架iframe
如果网页内嵌iframe,那么iframe里的元素是无法直接定位的,需要使用switch_to.frame进入frame操作: 之后需要再操作页面上非嵌入在iframe里的元素,需要使用switch_ ...
- POJ-3614 Sunscreen---贪心+优先队列
题目链接: https://vjudge.net/problem/POJ-3614 题目大意: 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小 ...
- git常用命令(二)
一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...
- GAN的调研和学习
近期集中学习了GAN,下面记录一下调研的结果,和学习的心得,疏漏的地方,敬请指正. 本文将分为几个部分进行介绍,首先是GAN的由来,其次是GAN的发展,最后是GAN的应用. 先把最近收集的资料列举一下 ...
- 前端面试整理(HTML&CSS)
1.行内元素和块级元素?img算什么?行内元素怎么转化为块级元素? 行内元素:和有他元素都在一行上,高度.行高及外边距和内边距都不可改变,文字图片的宽度不可改变,只能容纳文本或者其他行内元素:其中im ...
- Filter,一种aop编程思想的体现
一.filter简介 filter是Servlet规范里的一个高级特性,只用于对request.response的进行修改. filter提出了FilterChain的概念,客户端请求request在 ...
- Delphi 编写DLL动态链接库文件的知识
一.DLL动态链接库文件的知识简介: Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝.动态链接库就是在这种情况下出现的.动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可 ...