准备工作 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% 表示为解压的文件
准备工作
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 环境变量)
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 下, 并加入工程引用
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
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
集群 / 高可用性
数据库支持简单的集群 / 高可用性机制架构是: 两个数据库服务运行在两台不同的计算机上, 两台计算机有同样数据库的副本, 如果两个服务器都处于运行状态, 每个数据库操作都被在两台计算机上执行, 如果一台服务器宕机(断电硬件故障网络故障等), 另外一台计算机仍能提供服务, 从这一刻开始, 数据库操作仅在一台服务器上执行, 直到另外一台服务器恢复运行
集群仅能用于服务器模式 (内嵌模式并不支持集群) 可以在数据库运行状态下恢复集群, 但是要求在第二个数据库恢复期间没有应用在改变第一个数据库的数据, 因此恢复集群是一个手工的过程
初始化集群, 使用下面的步骤:
. 创建数据库
. 使用 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'
2 上面的 URL 改为 jdbc:h2:~/mem:test 也是可以的如果是 localhost 必须启动服务
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据库连接 URL 说明
数据库支持多种连接模式和连接设置, 不同的连接模式和连接设置是通过不同的 URL 来区分的, URL 中的设置是不区分大小写
Topic | URL Format and Examples |
嵌入式(本地)连接 | jdbc:h2:[file:][ jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only) |
内存数据库(私有) | jdbc:h2:mem: |
内存数据库(被命名) | jdbc:h2:mem: jdbc:h2:mem:test_mem |
使用 TCP/IP 的服务器模式(远程连接) | jdbc:h2:tcp:// jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample |
使用 SSL/TLS 的服务器模式(远程连接) | jdbc:h2:ssl:// jdbc:h2:ssl://secureserv:8085/~/sample; |
使用加密文件 | jdbc:h2: jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=XTEA |
文件锁 | jdbc:h2: jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET |
仅打开存在的数据库 | jdbc:h2: jdbc:h2:file:~/sample;IFEXISTS=TRUE |
当虚拟机退出时并不关闭数据库 | jdbc:h2: |
用户名和密码 | jdbc:h2: jdbc:h2:file:~/sample;USER=sa;PASSWORD=123 |
更新记入索引 | jdbc:h2: jdbc:h2:file:~/sample;LOG=2 |
调试跟踪项设置 | jdbc:h2: jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3 |
忽略位置参数设置 | jdbc:h2: |
指定文件读写模式 | jdbc:h2: |
在 Zip 文件中的数据库 | jdbc:h2:zip: jdbc:h2:zip:~/db.zip!/test |
兼容模式 | jdbc:h2: jdbc:h2:~/test;MODE=MYSQL |
自动重连接 | jdbc:h2: jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE |
自动混合模式 | jdbc:h2: jdbc:h2:~/test;AUTO_SERVER=TRUE |
更改其他设置 | jdbc:h2: jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3 |
来源: https://www.php1.cn/detail/php-d6a8acd279.html