H2_Database 概述、下载与安装、及使用入门

目录

H2 Database 概述

Connection Modes(连接模式)

下载与安装

H2 Database 使用入门

创建H2数据库

连接H2数据库

操作H2数据库

修改 H2 默认端口

Database URL Overview


 

H2 Database 概述

1、H2 是一个开源的嵌入式数据库引擎,纯 java 实现的关系型数据库,不受平台的限制。

2、H2 提供了一个 web 控制台用于操作和管理数据库内容,可以执行sql。

3、官方地址:http://www.h2database.com/html/main.html,官方介绍如下:

Very fast, open source, JDBC API(性能快速,代码开源,JDBC 即可操作,支持 SQL 标准)

Embedded and server modes; in-memory databases(支持网络版和嵌入式版本,以及内存版)

Browser based Console application (提供了基于web的数据库管理界面)

Small footprint: around 2 MB jar file size(占用空间小,大约2 MB jar文件大小)

4、其中最为常用的就是它的嵌入式版本,只需像平时使用其它库一样,导入 H2 的 jar 包到 Java 应用中即可使用 H2 数据库。

Features(特性)

1、下表中 H2,Derby,HSQLDB,MySQL,PostgreSQL 都是常用的开源数据库。

数据库对比 H2 Derby HSQLDB MySQL PostgreSQL
Pure Java(是否纯java编写) Yes Yes Yes No No
Memory Mode(是否支持内存存储模式) Yes Yes Yes No No
Encrypted Database(是否是加密数据库) Yes Yes Yes No No
ODBC Driver(是否支持 ODBC 驱动) Yes No No Yes Yes
Fulltext Search(是否支持全文检索) Yes No No Yes Yes
Multi Version Concurrency(多版本并发控制) Yes No Yes Yes Yes
Footprint (embedded)(嵌入式jar包大小) ~2 MB ~3 MB ~1.5 MB
Footprint (client)(客户端大小) ~500 KB ~600 KB ~1.5 MB ~1 MB ~700 KB

更多特性可以参考官网:http://www.h2database.com/html/features.html#connection_modes

官方使用文档下载

1、官网首页:http://www.h2database.com/html/download.html 的左侧的"Reference"下有一个 "PDF(1.5M)"选项,点击即可进入下载页

Connection Modes(连接模式)

1、The following connection modes are supported(H2 支持以下连接模式):

1)Embedded mode (local connections using JDBC)——嵌入式模式(使用JDBC的本地连接)

2)Server mode (remote connections using JDBC or ODBC over TCP/IP)——服务器模式(通过TCP/IP使用JDBC或ODBC的远程连接)

3)Mixed mode (local and remote connections at the same time)——混合模式(同时支持本地和远程连接)

Embedded mode(嵌入式模式)

嵌入式模式下,应用程序使用JDBC从相同的JVM中打开数据库。这是最快和最简单的连接模式。缺点是数据库可能在任何时候只在一个虚拟机(和类装入器)中打开。与所有模式一样,持久数据库和内存数据库都受到支持。并发打开的数据库数量或打开的连接数量没有限制。

The database is embedded in the application

Server Mode(服务器模式)

服务器模式(有时称为远程模式或客户机/服务器模式)下,应用程序使用JDBC或ODBC API远程打开数据库。服务器需要在相同的或另一台虚拟机中启动,或在另一台计算机上启动。应用程序连接到这个数据库服务器,许多应用程序可以同时连接到同一个数据库。在内部,服务器进程以嵌入式模式打开数据库。

服务器模式比嵌入式模式慢,因为所有数据都是通过TCP/IP传输的。与所有模式一样,持久数据库和内存数据库都受到支持。每个服务器并发打开的数据库数量或打开的连接数量没有限制。

The database is running in a server; the application connects to the server

Mixed Mode(混合模式)

混合模式是嵌入式模式和服务器模式的组合。连接到数据库的第一个应用程序在嵌入式模式下执行此操作,同时也作为服务器启动,以便其他应用程序(运行在不同的进程或虚拟机中)可以并发访问相同的数据。本地连接的速度与仅在嵌入式模式下使用数据库的速度一样快,而远程连接则稍慢一些。

可以从应用程序内部(使用服务器API)或自动(自动混合模式)启动和停止服务器。在使用自动混合模式时,希望连接到数据库的所有客户机(无论它是本地连接还是远程连接)都可以使用完全相同的数据库URL来连接数据库。

Database, server, and application run in one JVM; an application connects

更多详细参考官网:http://www.h2database.com/html/features.html

下载与安装

1、进入下载页进行下载:http://www.h2database.com/html/download.html

Version 1.4.198 (2019-02-22)

Windows Installer (SHA1 checksum: 20dd1e86a5f3ff897be4b9594a61bcacfc26dc21)
Platform-Independent Zip (SHA1 checksum: 1fe277abbb5c2840471f67e0b0895c23c49a6608)

2、Windows Install:一个 exe 安装程序,相当于 H2 数据库安装版的客户端,可以用于连接数据库,然后进行操作。

3、Platform-Independent Zip:一个 .zip 压缩文件,里面包含了二进制开发 Jar 包,整个官网的网页文档,以及 PDF 文档,项目源码,快捷操作脚本。建议下载这一个全家桶,解压后如下所示:

h2
  |---bin
  |    |---h2-1.4.198.jar      //H2 数据库jar包(包含驱动)
  |    |---h2.bat                  //Windows控制台启动脚本
  |    |---h2.sh                        //Linux控制台启动脚本
  |    |---h2w.bat                    //Windows控制台启动脚本(不带黑屏窗口,后端运行)
  |---docs                              //H2数据库的帮助文档(内有H2数据库的使用手册)

       |    |---h2.pdf                      //PDF 帮助文档

       |    |---index.html               //网页版帮助文档
  |---service                         //通过wrapper包装成服务,以服务的方式运行
  |---src                                //H2数据库的源代码
  |---build.bat                       //windows构建脚本
  |---build.sh                        //linux构建脚本

4、如上所示点击 "connect" 时报错数据库未找到,这是因为现在是第一次下载 H2 Database,JDBC URL (~/test:表示当前用户根目录下的test数据库)下暂时未曾生成过数据库文件,所以找不到而报错,等后期创建项目生成了 h2 数据库文件后,便可以连接了。

5、.sh、.bat 是启动 h2-1.4.198.jar 的快捷脚本,其实直接双击 h2-1.4.198.jar 运行也是可以的,而且可以将 h2-1.4.198.jar 拷贝到任何安装了 Java JDK,配置了 JDK 环境变量的电脑的任何位置直接运行。

H2 Database 使用入门

创建H2数据库

1、上面已经看到,运行之后连接数据库失败,所以第一步就是要创建 H2 数据库。

2、Windows 系统运行 h2.bat、h2w.bat、h2-1.4.198.jar 都可以,区别在于 h2.bat 会弹出一个黑色的 DOS 窗口,后两个不会,注意 h2.bat、h2w.bat 必须保持和 h2-1.4.198.jar 在一起才能运行,而 h2-1.4.198.jar 却可以自己单独在任意位置运行。

3、运行之后程序会自动调用默认浏览器打开 H2 Console 控制台,地址如:http://192.168.58.1:8082/login.jsp?jsessionid=ab61f33cf33fc4e35260b9f8a3ba7a73。可以看到 h2 数据库连接默认使用的是 8082 端口,后面会介绍如何修改这个默认端口

4、程序运行之后,任务栏会出现 H2 的小图标,右击图标,有如下菜单:

1)H2 Console:点击之后,会自动调用默认浏览器打开 H2 网页控制台,每点击一次就打开一次新的,每一个 H2 Console 控制台都可以进行 “Connect”(连接)数据库,然后进行操作

2)Create a new database..:创建新数据库,数据库可以使用 Java 程序来自动创建,也可以使用这个客户端手动创建。

3)Status:H2 连接地址的状态信息,点击之后,会提示信息如:H2 Console URL:http://192.168.1.20:8082;

4)Exit:退出,点击之后,即可退出此客户端。

5、点击 "Create a new database.." 菜单后如下所示:

Database Path:数据库文件路径,会自动以路径结尾的名称作为数据库名称

填写完成后,点击 "Create" 即可创建数据库成功,数据库文件以  .mv.db 结尾。

连接H2数据库

1、数据库创建之后,便可以使用 H2 控制台进行连接操作,如下所示连接的就是上面创建好的 testH2_2 数据库。

1、左上角可以设置语言,默认是英文

2、连接设置:Generic H2(Embedded)表示嵌入式连接模式,还有服务器模式 Server Model

3、驱动类:固定为 org.h2.Driver,这是 H2 的 jar 文件 h2-1.4.198.jar 中带好了的

4、JDBC URL:JDBC 连接的数据库地址,指向创建好的数据库自动即可,可以是绝对路径,也可以相对路径,如果是服务器模式,还可以 TCP 路径,即可以连接远程电脑上的 H2 数据库,不限于本地。

5、用户名、密码:填写创建数据库时设置的账号与密码即可

6、最后可以点击 “连接测试” 看是否能连接成功,然后点击 “连接”便可以连接进入

操作H2数据库

1、H2 Database 是支持 SQL 标准的,所以增删改查、建表、删表等 SQL 与之前操作 Mysql 完全一致。

2、下面以如下所示的语句进行演示:

//创建表
drop table if exists user;
CREATE TABLE IF NOT EXISTS user (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) DEFAULT NULL,
  pwd varchar(50) DEFAULT NULL,
  PRIMARY KEY (id)
);

//插入数据
INSERT INTO USER VALUES (NULL,'zhangsan' ,'123456' );
INSERT INTO USER VALUES (NULL,'lisi' ,'123456' );
INSERT INTO USER VALUES (NULL,'wagnwu' ,'123456' );

//查询所有数据
SELECT * FROM USER;

//删除 lisi
DELETE FROM USER WHERE name = 'lisi';
//查询所有数据
SELECT * FROM USER;

//删除表
DROP TABLE IF EXISTS user;

3、至于 H2 Console 控制台的操作也很简单:

4、现在演示的是手动操作 H2-version.jar 数据库的方式,后续会演示如何导入 H2-version.jar 到 Java 项目中,通过代码来进行操作 H2 数据库。

修改 H2 默认端口

1、从上面的截图中可以看到,默认情况下 H2 Database 使用的 8082 端口

2、当 H2 Console 控制台点击 "Connect" 连接数据库,连接成功时,则会在系统当前登录用户的根目录下自动生成一个 ".h2.server.properties"文件(内容变化时会自动更新)。

3、.h2.server.properties 配置文件内容如下:

#H2 Server Properties
#Thu Feb 28 13:33:11 CST 2019
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc\:teradata\://whomooz/|
10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc\:db2\://localhost/test|
11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:XE|sa
12=Generic MS SQL Server 2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc\:microsoft\:sqlserver\://localhost\:1433;DatabaseName\=sqlexpress|sa
13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
14=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
15=Generic MySQL|com.mysql.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
16=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
17=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
18=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc\:derby\:test;create\=true|sa
19=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/~/test|sa
2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc\:snowflake\://accountName.snowflakecomputing.com|
20=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:E\:\\\\wmx\\\\h2Database\\\\testH2_2|sa
3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc\:redshift\://endpoint\:5439/database|
4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc\:impala\://clustername\:21050/default|
5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc\:hive2\://clustername\:10000/default|
6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc\:hive\://clustername\:10000/default|
7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://name.database.windows.net\:1433|
8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
9=Generic SQLite|org.sqlite.JDBC|jdbc\:sqlite\:test|sa
webAllowOthers=false
webPort=8082
webSSL=false

webAllowOthers:表示是否运行进行远程 web 连接

webPort:表示浏览器访问时的端口

webSSL:表示是否加密传输

其它 0、1、2...这些全是配置,包括 JDBC URL 地址中的连接模式与连接设置都会在其中进行记录,当下一次连接时,如果 JBCD URL 地址中的参数发送变化,则会自动更新此文件。

4、于是当修改 .h2.server.properties 中的 webPort=7072 之后, H2 Console 再次访问时必须使用 7072 端口了。

1)修改 .h2.server.properties 配置文件后,需要先退出 h2-version.jar 应用,重启后生效。

2)同理使用 Java 应用配置 H2 数据源进行操作时,如果 JDBC URL 地址发生变化,同样会自动修改此文件。

Database URL Overview

1、H2 数据库通过使用不同的 JDBC URL 地址实现多种连接模式连接设置,URL中的设置不区分大小写

2、JDBC URL 不止会在 H2 Console 控制台使用,在 Java 项目使用 H2 数据库,配置数据源时也会进行使用。

3、连接模式指的就是 H2 的 3中连接模式(嵌入式模式、服务器模式、混合模式),连接设置指的是连接数据库时的设置,比如:是否自动重连、字符编码、数据库是否只读、Java 虚拟机退出时 H2数据库是否关闭、加密数据库文件 等等。

4、如下这些 JDBC URL 地址都可在官网找到:http://www.h2database.com/html/features.html

Database URL Overview
Topic URL Format and Examples

Embedded (local) connection

(嵌入式模式,支持本地连接)

jdbc:h2:[file:][<path>]<databaseName>    "[]" 表示可省略
jdbc:h2:~/test           "~" 表示系统当前登录用户的根目录

jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)
In-memory (private) jdbc:h2:mem:
In-memory (named) jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem


Server mode (remote connections) using TCP/IP

(服务器模式,支持远程连接)

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test   "~" 表示系统当前登录用户的根目录
jdbc:h2:tcp://dbserv:8084/~/sample
jdbc:h2:tcp://localhost/mem:test

Server mode (remote connections) using TLS
jdbc:h2:ssl://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:ssl://localhost:8085/~/sample;

Using encrypted files

(是否加密数据库文件)

jdbc:h2:<url>;CIPHER=AES
jdbc:h2:ssl://localhost/~/test;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=AES
File locking methods jdbc:h2:<url>;FILE_LOCK={FILE|SOCKET|NO}
jdbc:h2:file:~/private;CIPHER=AES;FILE_LOCK=SOCKET

Only open if it already exists

(是否只打开已经存在的数据库,默认情况下,如果数据库不存在,则会新建)

jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE

Don't close the database when the VM exits

(Java虚拟机退出时是否关闭H2数据库,默认情况下,最后一个连接断开后,数据库就会关闭)

jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE
Execute SQL on connection jdbc:h2:<url>;INIT=RUNSCRIPT FROM '~/create.sql'
jdbc:h2:file:~/sample;INIT=RUNSCRIPT FROM '~/create.sql'\;RUNSCRIPT FROM '~/populate.sql'

User name and/or password

(用户账号与密码)

jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123

Debug trace settings

(调试追踪设置,用于打印信息,根据跟踪文件生成数据库)

jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
Ignore unknown settings jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE

Custom file access mode

(自定义读取模式,如是否只读,读写等)

jdbc:h2:<url>;ACCESS_MODE_DATA=rws
Database in a zip file jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test

Compatibility mode

(兼容模式)

jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL

Auto-reconnect

(自动重连)

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

Automatic mixed mode

(自动混合模式。默认情况下,H2 只运行一个进程访问,true 表示可以多个进程可以访问同一个数据库)

jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE

Page size

(数据库页面大小,默认为 2KB,无法修改现有数据库的页面大小,必须在创建时进行指定)

jdbc:h2:<url>;PAGE_SIZE=512
Changing other settings jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3

5、这些设置都可以通过追加 JDBC URL 的后面达到相应的效果,当连接成功后,这些连接参数都会记录在 .h2.server.properties 配置文件中。

猜你喜欢

转载自blog.csdn.net/wangmx1993328/article/details/87965971