H2 Database安装部署
H2 Database
H2 Database官网
H2 中文文档
安装部署H2
java版本要高于java 11
## 下载java21
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
[root@localhost ~]# tar xf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
[root@localhost ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk-21.0.5
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
## 下载h2安装包
wget https://github.com/h2database/h2database/releases/download/version-2.3.232/h2-2024-08-11.zip
## 创建数据目录
mkdir -p /data/h2
## 启动h2
nohup java -cp h2-2.3.232.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpPort 9092 -tcpAllowOthers -pg -pgAllowOthers -pgPort 5432 -baseDir /data/h2/ &
## 端口
root@PostgreSQL bin]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1353/sshd: /usr/sbi
tcp6 0 0 :::9876 :::* LISTEN 9806/java
tcp6 0 0 :::22 :::* LISTEN 1353/sshd: /usr/sbi
tcp6 0 0 :::5432 :::* LISTEN 13432/java
tcp6 0 0 :::10909 :::* LISTEN 10001/java
tcp6 0 0 :::10911 :::* LISTEN 10001/java
tcp6 0 0 :::10912 :::* LISTEN 10001/java
tcp6 0 0 :::9092 :::* LISTEN 13432/java
tcp6 0 0 :::8080 :::* LISTEN 10001/java
tcp6 0 0 :::8081 :::* LISTEN 10001/java
tcp6 0 0 :::8082 :::* LISTEN 13432/java
h2启动参数说明
参数 | 描述 |
---|---|
-web | 启动带有 H2 控制台的 web 服务器 |
-webAllowOthers | 允许其他计算机连接到 web 服务器 |
-tcp | 启动 TCP 服务器 |
-tcpPort <port> | 设置 TCP 服务器的端口 |
-tcpAllowOthers | 允许其他计算机连接到 TCP 服务器 |
-pg | 启动 PG 服务器(PostgreSQL 兼容) |
-pgAllowOthers | 允许其他计算机连接到 PG 服务器 |
-pgPort <port> | 设置 PG 服务器的端口 |
-baseDir <dir> | 设置 H2 数据库的基础目录,所有数据库文件将存储在这个目录下(经过测试发现该参数不起作用) |
官网介绍
连接H2
使用控制台连接
[root@PostgreSQL bin]# java -cp h2-2.3.232.jar org.h2.tools.Shell
Welcome to H2 Shell 2.3.232 (2024-08-11)
Exit with Ctrl+C
[Enter] jdbc:h2:~/test
URL
[Enter] org.h2.Driver
Driver
[Enter]
User
Password Password ><
Connected
Commands are case insensitive; SQL statements end with ';'
help or ? Display this help
list Toggle result list / stack trace mode
maxwidth Set maximum column width (default is 100)
autocommit Enable or disable autocommit
history Show the last 20 statements
quit or exit Close the connection and exit
sql>
参数说明
参数 | 描述 |
---|---|
-help 或 -? | 打印可用选项列表 |
-url "<url>" | 数据库的 URL(例如:jdbc:h2:…) |
-user <user> | 用户名 |
-password <pwd> | 密码 |
-driver <class> | 要使用的 JDBC 驱动类(大多数情况下不需要指定) |
-sql "<statements>" | 执行 SQL 语句并退出 |
-properties "<dir>" | 从指定目录加载服务器属性 |
从日志中可以看到连接地址
TCP server running at tcp://192.168.202.159:9092 (others can connect)
PG server running at pg://192.168.202.159:5432 (others can connect)
Web Console server running at http://192.168.202.159:8082 (others can connect)
创建新一个新数据库
缺省情况下,如果 URL 指定的数据库并不存在,一个新的空的数据库将被自动的创建。创建数据库的用户自动成为这个数据库的超级管理员。
自动创建新库也可以通过特殊的 URL 进行屏蔽
介绍
创建表
CREATE [ CACHED | MEMORY ] [ { TEMP } | [ GLOBAL | LOCAL ] TEMPORARY ] TABLE [ IF NOT EXISTS ] [schemaName.]tableName [ ( { columnName [columnDefinition] | tableConstraintDefinition } [,...] ) ] [ ENGINE tableEngineName ] [ WITH tableEngineParamName [,...] ] [ NOT PERSISTENT ] [ TRANSACTIONAL ] [ AS ( query ) [ WITH [ NO ] DATA ] ]
sql> CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
(Update count: 0, 6 ms)
sql> show tables;
TABLE_NAME | TABLE_SCHEMA
TEST | PUBLIC
(1 row, 24 ms)
sql>
-
缓存表(普通表的默认类型)是持久化的,其行数不受主内存限制。
-
内存表是持久化的,但索引数据存储在主内存中,这意味着内存表不应过大。
查看表的列
SHOW { SCHEMAS | TABLES [ FROM schemaName ] | COLUMNS FROM tableName [ FROM schemaName ] }
sql> show columns from test;
FIELD | TYPE | NULL | KEY | DEFAULT
ID | INTEGER | NO | PRI | NULL
NAME | CHARACTER VARYING(255) | YES | | NULL
(2 rows, 11 ms)
插入数据
CREATE TABLE timeseries_table (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP,
data_column DOUBLE
);
INSERT INTO timeseries_table (timestamp, data_column)
SELECT
DATEADD('SECOND', CAST(floor(random() * 86400) AS INT), CURRENT_TIMESTAMP), -- 当前时间到明天同一时间的随机时间
floor(random() * 100000) -- 随机数据列值
FROM generate_series(1, 1000000);
创建用户
CREATE USER [ IF NOT EXISTS ] newUserName { PASSWORD string | SALT bytes HASH bytes } [ ADMIN ]
-- 创建管理员用户
CREATE USER h2 PASSWORD 'h2' ADMIN;
-- 查看用户
sql> select * from information_schema.users;
USER_NAME | IS_ADMIN | REMARKS
| TRUE | null
H2 | TRUE | null
(2 rows, 0 ms)
-- 查看参数配置
sql> select * from information_schema.settings limit(3);
SETTING_NAME | SETTING_VALUE
CREATE_BUILD | 232
info.BUILD_ID | 232
info.VERSION_MAJOR | 2
(3 rows, 1 ms)
sql>
-- 嵌入式连接、他会自动创建一个数据库和用户,直接访问的是本地文件,有个独占排他的功能(可以不限制是否是在数据库的base目录下)
java -cp h2-2.3.232.jar org.h2.tools.Shell -url "jdbc:h2:/root/tmp/h2/data" -user h2 -password h2
Welcome to H2 Shell 2.3.232 (2024-08-11)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ? Display this help
list 切换结果显示模式(在“结果列表模式”和“堆栈跟踪模式”之间切换)
maxwidth 设置最大列宽(默认值为 100)
autocommit 启用或禁用自动提交
history 显示最近执行的 20 条语句
quit or exit 关闭连接并退出
创建数据库(不能再远程创建,只能由DBA给创建好)
[root@PostgreSQL bin]# java -cp h2-*.jar org.h2.tools.Shell
Welcome to H2 Shell 2.3.232 (2024-08-11)
Exit with Ctrl+C
[Enter] jdbc:h2:~/test
URL jdbc:h2:/data/h2/test
[Enter] org.h2.Driver
Driver org.h2.Driver
[Enter]
User sa
Password Password >>><
Connected
Commands are case insensitive; SQL statements end with ';'
help or ? Display this help
list Toggle result list / stack trace mode
maxwidth Set maximum column width (default is 100)
autocommit Enable or disable autocommit
history Show the last 20 statements
quit or exit Close the connection and exit
sql>
[root@PostgreSQL bin]# java -cp h2-*.jar org.h2.tools.Shell
Welcome to H2 Shell 2.3.232 (2024-08-11)
Exit with Ctrl+C
[Enter] jdbc:h2:~/test
URL jdbc:h2:/data/h2/fbase
[Enter] org.h2.Driver
Driver org.h2.Driver
[Enter]
User sa
Password Password >>><
Type the same password again to confirm database creation.
Password Password >>><
Connected
-- 使用远程连接
java -cp h2-*.jar org.h2.tools.Shell -url "jdbc:h2:tcp://192.168.202.159:9092/test" -user sa -password sa
java -cp h2-*.jar org.h2.tools.Shell -url "jdbc:h2:tcp://192.168.202.159:9092/fbase" -user sa -password sa
使用web控制台的连接