H2 数据库 – 快速指南

H2 数据库 – 快速指南


H2 数据库 – 介绍

H2 是一个开源的轻量级 Java 数据库。它可以嵌入到 Java 应用程序中或以客户端-服务器模式运行。主要是,H2 数据库可以配置为作为内存数据库运行,这意味着数据不会保留在磁盘上。由于嵌入式数据库,它不用于生产开发,而主要用于开发和测试。

该数据库可以在嵌入式模式或服务器模式下使用。以下是 H2 数据库的主要功能 –

  • 极快的开源 JDBC API
  • 可用于嵌入式和服务器模式;内存数据库
  • 基于浏览器的控制台应用程序
  • 占用空间小 – 大约 1.5MB jar 文件大小

H2数据库的特点

H2 数据库的主要特点如下 –

  • 它是一个非常快的数据库引擎。

  • H2 是开源的,用 Java 编写。

  • 它支持标准的 SQL 和 JDBC API。它也可以使用 PostgreSQL ODBC 驱动程序。

  • 它具有嵌入式和服务器模式。

  • H2 支持集群多版本并发

  • 它具有强大的安全功能。

附加的功能

以下是 H2 数据库的一些附加功能 –

  • H2 是基于磁盘或内存中的数据库和表,只读数据库支持,临时表。

  • H2 提供事务支持(读提交)、2-phase-commit 多个连接、表级锁定。

  • H2 是一个基于成本的优化器,使用遗传算法进行复杂查询,零管理。

  • H2包含可滚动和可更新的结果集支持,大结果集,外部结果排序,函数可以返回一个结果集。

  • H2支持加密数据库(AES)、SHA-256密码加密、加密功能和SSL。

H2 数据库中的组件

为了使用 H2 数据库,您需要具有以下组件 –

  • 网络浏览器
  • H2 控制台服务器

这是一个客户端/服务器应用程序,因此需要服务器和客户端(浏览器)来运行它。

H2 数据库 – 安装

H2 是一个用 Java 编写的数据库。我们可以使用 JDBC 轻松地将此数据库嵌入到我们的应用程序中。我们可以在许多不同的平台或任何版本的 Java 运行时环境上运行它。但是在安装数据库之前,系统中应该已经安装了Java。

验证 Java 安装

如果系统中安装了JDK,请尝试以下命令验证Java版本。

java –version

如果系统中成功安装了JDK,那么我们将得到以下输出。

java version "1.8.0_91" 
Java(TM) SE Runtime Environment (build 1.8.0_91-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

如果系统中未安装 JDK,请访问以下链接安装 JDK

安装 H2 数据库

我们可以在许多不同的平台上运行这个数据库。在本章中,我们将学习在 Windows 上安装 H2 数据库。

以下是在 Windows 操作系统上安装 H2 数据库的步骤。

步骤 1:下载 H2 安装文件

从给定的链接下载最新版本的H2 数据库在此链接中,您将获得两种类型的 H2 数据库的最新版本。一种是 Windows Installer 类型(即 .exe 文件),第二种是适用于其他操作系统的与平台无关的 zip 文件。

下载 .exe 文件后,单击 Windows 安装程序以下载 Windows 支持的 H2 数据库。在本例中,我们使用版本为 1.4.192 的 H2 数据库。

第二步:安装H2数据库

下载后,我们在下载目录中获得 H2 Windows 安装程序文件(即 h2-setup-yyyy-mm-dd.exe)。要开始 H2 数据库的安装过程,请双击安装程序文件。

以下屏幕是安装过程的第一步。提供我们要安装 H2 数据库服务器的路径,如下面的屏幕截图所示。

安装 H2 数据库

如上图所示,默认情况下,它会将C:\ProgramFiles (x86)\H2作为目标文件夹。单击下一步继续下一步。弹出以下屏幕。

目的地

在上面的屏幕截图中,单击安装按钮开始安装过程。安装后,我们得到以下截图。

安装按钮

单击完成以完成安装过程。

步骤 3:验证 H2 数据库安装

安装完成后,让我们验证一下系统中的数据库安装。单击 Windows → 键入 H2 Console → 单击 H2 控制台图标。连接到 URL http://localhost:8082在连接时,H2 数据库将要求数据库注册,如下面的屏幕截图所示。

数据库安装

填写以上对话框中的所有详细信息,例如 Saved Settings、Settings Name、Driver Class、JDBC URL、User Name 和 Password。在 JDBC URL 中,指定数据库所在的位置和数据库名称。用户名和密码是数据库的用户名和密码字段。单击连接。

弹出数据库欢迎页面,如下面的屏幕截图所示。

弹出窗口

H2 数据库 – 选择

Select 命令用于从一个表或多个表中获取记录数据。如果我们设计一个选择查询,那么它以结果表的形式返回数据,称为结果集

句法

SELECT 语句的基本语法如下 –

SELECT [ TOP term ] [ DISTINCT | ALL ] selectExpression [,...] 
FROM tableExpression [,...] [ WHERE expression ] 
[ GROUP BY expression [,...] ] [ HAVING expression ] 
[ { UNION [ ALL ] | MINUS | EXCEPT | INTERSECT } select ] [ ORDER BY order [,...] ] 
[ [ LIMIT expression ] [ OFFSET expression ] [ SAMPLE_SIZE rowCountInt ] ] 
[ FOR UPDATE ]

要获取所有可用字段,请使用以下语法。

SELECT * FROM table_name;

例子

考虑具有以下记录的 CUSTOMER 表 –

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+ 

要获取带有给定数据的客户表,请执行以下查询。

CREATE TABLE CUSTOMER (id number, name varchar(20), age number, address varchar(20), 
salary number);  

INSERT into CUSTOMER values (1, 'Ramesh', 32, 'Ahmedabad', 2000); 
INSERT into CUSTOMER values (2, 'Khilan', 25, 'Delhi', 1500); 
INSERT into CUSTOMER values (3, 'kaushik', 23, 'Kota', 2000); 
INSERT into CUSTOMER values (4, 'Chaitali', 25, 'Mumbai', 6500); 
INSERT into CUSTOMER values (5, 'Hardik', 27, 'Bhopal', 8500); 
INSERT into CUSTOMER values (6, 'Komal', 22, 'MP', 4500); 
INSERT into CUSTOMER values (7, 'Muffy', 24, 'Indore', 10000);

以下命令是一个示例,它将获取 CUSTOMER 表中可用客户的 ID、姓名和薪水字段。

SELECT ID, NAME, SALARY FROM CUSTOMERS;

上述命令产生以下结果。

+----+----------+----------+ 
| ID | NAME     | SALARY   | 
+----+----------+----------+ 
|  1 | Ramesh   |  2000.00 | 
|  2 | Khilan   |  1500.00 | 
|  3 | kaushik  |  2000.00 | 
|  4 | Chaitali |  6500.00 | 
|  5 | Hardik   |  8500.00 | 
|  6 | Komal    |  4500.00 | 
|  7 | Muffy    | 10000.00 | 
+----+----------+----------+ 

使用以下查询获取 CUSTOMERS 表的所有字段。

SQL> SELECT * FROM CUSTOMERS;

上述查询产生以下结果 –

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+ 

H2 数据库 – 插入

SQL INSERT 语句用于向数据库中的表添加新的数据行。

句法

以下是 INSERT INTO 语句的基本语法。

INSERT INTO tableName 
{ [ ( columnName [,...] ) ] 
{ VALUES 
{ ( { DEFAULT | expression } [,...] ) } [,...] | [ DIRECT ] [ SORTED ] select } } | 
{ SET { columnName = { DEFAULT | expression } } [,...] }

使用此 INSERT 语句,我们可以将新记录或新行插入到表中。使用 DIRECT 子句时,结果直接影响到目标表,无需任何中间步骤。但是,在为表的所有列添加值时,请确保值的顺序与表中的列的顺序相同。

例子

让我们举个例子,尝试将以下给定的记录插入到 Customer 表中。

ID 名称 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000年
2 吉兰 25 德里 1500
3 考希克 23 哥打 2000年
4 柴尾 25 孟买 6500
5 哈迪克 27 博帕尔 8500
6 科马尔 22 议员 4500
7 马菲 24 印多尔 10000

我们可以通过执行以下命令将所有给定的记录放入客户表中。

INSERT INTO CUSTOMER VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000); 
INSERT INTO CUSTOMER VALUES (2, 'Khilan', 25, 'Delhi', 1500); 
INSERT INTO CUSTOMER VALUES (3, 'kaushik', 23, 'Kota', 2000); 
INSERT INTO CUSTOMER VALUES (4, 'Chaitali', 25, 'Mumbai', 6500); 
INSERT INTO CUSTOMER VALUES (5, 'Hardik', 27, 'Bhopal', 8500); 
INSERT INTO CUSTOMER VALUES (6, 'Komal', 22, 'MP', 4500); 
INSERT INTO CUSTOMER VALUES (7, 'Muffy', 24, 'Indore', 10000); 

H2 数据库 – 更新

UPDATE 查询用于更新或修改表中的现有记录。我们可以使用 WHERE 子句和 UPDATE 查询来更新选定的行,否则所有行都会受到影响。

句法

以下是 UPDATE 查询的基本语法。

UPDATE tableName [ [ AS ] newTableAlias ] SET 
{ { columnName = { DEFAULT | expression } } [,...] } | 
{ ( columnName [,...] ) = ( select ) } 
[ WHERE expression ] [ ORDER BY order [,...] ] [ LIMIT expression ]

在此 UPDATE 语法中,我们可以使用 AND 或 OR 子句组合多个条件。

例子

考虑具有以下记录的 CUSTOMER 表。

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+ 

如果要获取客户表以及给定数据,请执行以下查询。

CREATE TABLE CUSTOMER (id number, name varchar(20), age number, address varchar(20), 
   salary number);  
INSERT into CUSTOMER values (1, 'Ramesh', 32, 'Ahmedabad', 2000); 
INSERT into CUSTOMER values (2, 'Khilan', 25, 'Delhi', 1500); 
INSERT into CUSTOMER values (3, 'kaushik', 23, 'Kota', 2000); 
INSERT into CUSTOMER values (4, 'Chaitali', 25, 'Mumbai', 6500); 
INSERT into CUSTOMER values (5, 'Hardik', 27, 'Bhopal', 8500); 
INSERT into CUSTOMER values (6, 'Komal', 22, 'MP', 4500); 
INSERT into CUSTOMER values (7, 'Muffy', 24, 'Indore', 10000);

以下命令是一个示例,它将为 ID 为 6 的客户更新 ADDRESS –

UPDATE CUSTOMERS SET ADDRESS = 'Pune' WHERE ID = 6;

现在,CUSTOMERS 表将具有以下记录。我们可以通过执行以下查询来检查客户表记录。

SELECT * FROM CUSTOMERS;

上述查询产生以下结果。

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | Pune      |  4500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+ 

要修改 CUSTOMERS 表中的所有 ADDRESS 和 SALARY 列值,我们不需要使用 WHERE 子句。UPDATE 查询如下 –

UPDATE CUSTOMERS SET ADDRESS = 'Pune', SALARY = 1000.00; 

现在,CUSTOMERS 表将具有以下记录。我们可以通过执行以下查询来检查客户表记录。

SELECT * FROM CUSTOMERS;

上述查询产生以下结果 –

+----+----------+-----+---------+---------+ 
| ID | NAME     | AGE | ADDRESS | SALARY  | 
+----+----------+-----+---------+---------+ 
|  1 | Ramesh   |  32 | Pune    | 1000.00 | 
|  2 | Khilan   |  25 | Pune    | 1000.00 | 
|  3 | kaushik  |  23 | Pune    | 1000.00 | 
|  4 | Chaitali |  25 | Pune    | 1000.00 | 
|  5 | Hardik   |  27 | Pune    | 1000.00 | 
|  6 | Komal    |  22 | Pune    | 1000.00 | 
|  7 | Muffy    |  24 | Pune    | 1000.00 | 
+----+----------+-----+---------+---------+ 

H2 数据库 – 删除

SQL DELETE 查询用于从表中删除现有记录。我们可以使用 WHERE 子句和 DELETE 查询来删除选定的记录,否则将删除所有记录。

句法

以下是删除命令的通用查询语法。

DELETE [ TOP term ] FROM tableName [ WHERE expression ] [ LIMIT term ]

上述语法从表中删除行。如果指定了 TOP 或 LIMIT,则最多删除指定数量的行(如果为 null 或小于零,则没有限制)。

例子

考虑具有以下记录的 CUSTOMER 表。

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+

以下命令将删除 ID 为 6 的客户的详细信息。

DELETE FROM CUSTOMERS WHERE ID = 6;

执行上述命令后,通过执行以下命令检查 Customer 表。

SELECT * FROM CUSTOMERS; 

上面的命令产生以下输出 –

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  7 | Muffy    |  24 | Indore    | 10000.00 | 
+----+----------+-----+-----------+----------+ 

如果我们想从 CUSTOMERS 表中删除所有记录,我们不使用 WHERE 子句。DELETE 查询如下所示。

DELETE FROM CUSTOMER; 

执行上述命令后,Customer 表中将没有可用的记录。

H2 数据库 – 备份

BACKUP 是用于将数据库备份放入单独的 .zip 文件的命令。对象没有被锁定,当它进行备份时,事务日志也会被复制。执行此命令需要管理员权限。

句法

以下是备份命令的通用语法。

BACKUP TO fileNameString;

例子

在本例中,让我们将当前数据库备份到backup.zip文件中。使用以下命令相同。

BACKUP TO 'backup.zip';

执行上述命令后,您将在本地文件系统中获得 backup.zip 文件。

H2 数据库 – 调用

CALL 是属于 H2 数据库服务器的 SQL 命令。该命令用于计算一个简单的表达式。它在单列字段中返回给定表达式的结果。当它返回一个结果数组时,数组中的每个元素都显示为一个列值。

句法

以下是 CALL 命令的通用语法。

CALL expression;

我们可以在这个语法中使用算术表达式。

例子

让我们举个例子,使用 call 命令执行算术表达式 (15 &ast 25)。

CALL 15*25; 

上述命令产生以下输出。

375
375

H2 数据库 – 解释

EXPLAIN 命令显示语句的执行计划。当我们使用 EXPLAIN ANALYZE 命令执行语句时,查询计划将包括每个表的实际行扫描计数。

句法

以下是 EXPLAIN 命令的通用语法。

EXPLAIN { [ PLAN FOR ] | ANALYZE } { select | insert | update | delete | merge} 

除了这个语法,我们还可以使用选择、插入、删除和合并。

例子

此示例说明 ID 为 1 的客户的查询计划详细信息。

EXPLAIN SELECT * FROM CUSTOMER WHERE ID = 1;

上面的命令产生以下输出 –

解释输出

H2 数据库 – 合并

MERGE 命令用于更新现有行并将新行插入表中。主键列在使用此命令时起着重要作用;它用于查找行。

句法

以下是 MERGE 命令的通用语法。

MERGE INTO tableName [ ( columnName [,...] ) ] 
[ KEY ( columnName [,...] ) ] 
{ VALUES { ( { DEFAULT | expression } [,...] ) } [,...] | select } 

在上面的语法中,KEY 子句用于指定主键列名。连同 VALUES 子句,我们可以使用原始值插入,或者我们可以使用 select 命令检索另一个表值并将其存储到该表中。

例子

在这个例子中,让我们尝试向客户表中添加一条新记录。以下是表中新记录的详细信息。

Column Name 价值
ID 8
NAME 洛克什
AGE 32
ADDRESS 海得拉巴
SALARY 2500

使用以下查询,让我们将给定的记录插入到 H2 数据库查询中。

MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Lokesh', 32, 'Hyderabad', 2500);

上述查询产生以下输出。

Update count: 1 

让我们通过执行以下查询来验证 Customer 表的记录。

SELECT * FROM CUSTOMER;

上述查询产生以下输出。

ID 名称 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000年
2 吉兰 25 德里 1500
3 考希克 23 哥打 2000年
4 柴塔利 25 孟买 6500
5 哈迪克 27 博帕尔 8500
6 科马尔 22 议员 4500
7 马菲 24 印多尔 10000
8 洛克什 32 海得拉巴 2500

现在让我们尝试使用Merge命令更新记录以下是要更新的记录的详细信息。

Column Name 价值
ID 8
NAME 洛基
AGE 32
ADDRESS 海得拉巴
SALARY 3000

使用以下查询将给定记录插入到 H2 数据库查询中。

MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Loki', 32, 'Hyderabad', 3000);

上述查询产生以下输出。

Update count: 1 

让我们通过执行以下查询来验证 Customer 表的记录。

SELECT * FROM CUSTOMER; 

上述查询产生以下输出 –

ID 名称 年龄 地址 薪水
1 拉梅什 32 艾哈迈达巴德 2000年
2 吉兰 25 德里 1500
3 考希克 23 哥打 2000年
4 柴塔利 25 孟买 6500
5 哈迪克 27 博帕尔 8500
6 科马尔 22 议员 4500
7 马菲 24 印多尔 10000
8 洛基 32 海得拉巴 3000

H2 数据库 – 显示

SHOW 是用于显示表的模式、表或列的列表的命令。

句法

以下是 SHOW 命令的通用语法。

SHOW { SCHEMAS | TABLES [ FROM schemaName ] | 
COLUMNS FROM tableName [ FROM schemaName ] } 

例子

以下命令可用于获取当前数据库中的表列表。

SHOW TABLES; 

上述命令产生以下输出。

TABLE_NAME TABLE_SCHEMA
CUSTOMER 上市
EMP 上市

H2 数据库 – 创建

CREATE 是一个通用的 SQL 命令,用于在 H2 数据库服务器中创建表、模式、序列、视图和用户。

创建表

创建表是用于在当前数据库中创建用户自定义表的命令。

句法

以下是创建表命令的通用语法。

CREATE [ CACHED | MEMORY ] [ TEMP | [ GLOBAL | LOCAL ] TEMPORARY ] 
TABLE [ IF NOT EXISTS ] name 
[ ( { columnDefinition | constraint } [,...] ) ] 
[ ENGINE tableEngineName [ WITH tableEngineParamName [,...] ] ] 
[ NOT PERSISTENT ] [ TRANSACTIONAL ] 
[ AS select ] 

通过使用 Create Table 命令的通用语法,我们可以创建不同类型的表,例如缓存表、内存表和临时表。以下是描述给定语法中不同子句的列表。

  • CACHED – 缓存表是常规表的默认类型。这意味着行数不受主内存的限制。

  • MEMORY – 内存表是临时表的默认类型。这意味着内存表不应变得太大,索引数据保存在主内存中。

  • TEMPORARY – 关闭或打开数据库时删除临时表。基本上,临时表有两种类型 –

    • GLOBAL 类型 – 所有连接均可访问。

    • LOCAL 类型 – 当前连接可访问。

    临时表的默认类型是全局类型。临时表的索引保存在主内存中,除非临时表是使用 CREATE CACHED TABLE 创建的。

  • ENGINE – 只有在使用自定义表实现时才需要 ENGINE 选项。

  • NOT PERSISTENT – 它是一个修饰符,用于将完整的表数据保存在内存中,并且在数据库关闭时所有行都将丢失。

  • TRANSACTIONAL – 这是一个提交打开事务的关键字,此命令仅支持临时表。

例子

在此示例中,让我们使用以下给定数据创建一个名为 tutorials_tbl 的表。

Sr.No 列名 数据类型
1 ID 整数
2 标题 瓦尔查尔(50)
3 作者 瓦尔查尔(20)
4 提交日期 日期

以下查询用于创建表tutorials_tbl以及给定的列数据。

CREATE TABLE tutorials_tbl ( 
   id INT NOT NULL, 
   title VARCHAR(50) NOT NULL, 
   author VARCHAR(20) NOT NULL, 
   submission_date DATE 
);

上述查询产生以下输出。

(0) rows effected 

创建架构

Create Schema 是用于在特定授权下(在当前注册用户下)创建依赖于用户的架构的命令。

句法

以下是创建架构命令的通用语法。

CREATE SCHEMA [ IF NOT EXISTS ] name [ AUTHORIZATION ownerUserName ] 

在上述通用语法中,AUTHORIZATION 是用于提供相应用户名的关键字。此命令是可选的,这意味着如果我们不提供用户名,则它将考虑当前用户。执行命令的用户必须具有管理员权限,以及所有者。

此命令在此连接中提交一个打开的事务。

例子

在此示例中,让我们使用以下命令在 SA 用户下创建名为test_schema的架构

CREATE SCHEMA test_schema AUTHORIZATION sa; 

上述命令产生以下输出。

(0) rows effected 

创建序列

序列是用于通过遵循 id 或任何随机列值的序列来生成数字的概念。

句法

以下是创建序列命令的通用语法。

CREATE SEQUENCE [ IF NOT EXISTS ] newSequenceName [ START WITH long ] 
[ INCREMENT BY long ] 
[ MINVALUE long | NOMINVALUE | NO MINVALUE ] 
[ MAXVALUE long | NOMAXVALUE | NO MAXVALUE ] 
[ CYCLE long | NOCYCLE | NO CYCLE ] 
[ CACHE long | NOCACHE | NO CACHE ] 

此通用语法用于创建序列。序列的数据类型是BIGINT在这个序列中,即使事务回滚,值也不会被重用。

例子

在此示例中,让我们使用以下查询创建一个名为SEQ_ID的序列

CREATE SEQUENCE SEQ_ID; 

上述查询产生以下输出。

(0) rows effected 

H2 数据库 – 更改

ALTER 是一个命令,用于通过向alter命令添加不同的子句来更改表结构根据场景,我们需要在 alter 命令中添加相应的子句。在本章中,我们将讨论alter 命令的各种场景。

更改表添加

Alter Table Add 是一个命令,用于向表中添加新列以及相应的数据类型。此命令在此连接中提交事务。

句法

以下是“更改表添加”命令的通用语法。

ALTER TABLE [ IF EXISTS ] tableName ADD [ COLUMN ] 
{ [ IF NOT EXISTS ] columnDefinition [ { BEFORE | AFTER } columnName ] 
   | ( { columnDefinition } [,...] ) }

例子

在此示例中,我们将向tutorials_tbl添加一个新列start_datestart_date 的数据类型是日期。以下是添加新列的查询。

ALTER TABLE tutorials_tbl ADD start_date DATE;

上述查询产生以下输出。

(6) rows effected 

更改表添加约束

更改表添加约束是一个命令,用于向表添加不同的约束,例如主键、外键、非空等。

如果所需的索引尚不存在,则会自动创建它们。不可能禁用对唯一约束的检查。此命令在此连接中提交一个打开的事务。

句法

以下是更改表添加约束命令的通用语法。

ALTER TABLE [ IF EXISTS ] tableName ADD constraint [ CHECK | NOCHECK ] 

例子

在此示例中,让我们使用以下查询将主键约束(tutorials_tbl_pk) 添加到表tutorials_tbl的列 id

ALTER TABLE tutorials_tbl ADD CONSTRAINT tutorials_tbl_pk PRIMARYKEY(id); 

上述查询产生以下输出。

(6) row (s) effected

更改表重命名约束

该命令用于重命名特定关系表的约束名称。此命令在此连接中提交一个打开的事务。

句法

以下是更改表重命名约束命令的通用语法。

ALTER TABLE [ IF EXISTS ] tableName RENAME oldConstraintName TO newConstraintName

使用此语法时,请确保旧约束名称应与相应列一起存在。

例子

在此示例中,我们将表tutorials_tbl的主键约束名称tutorials_tbl_pk更改为tutorials_tbl_pk_constraint以下是执行此操作的查询。

ALTER TABLE tutorials_tbl RENAME CONSTRAINT 
tutorials_tbl_pk TO tutorials_tbl_pk_constraint;

上述查询产生以下输出。

(1) row (s) effected 

更改表 更改列

此命令用于更改特定表的列的结构和属性。更改属性意味着更改列的数据类型、重命名列、更改标识值或更改选择性。

句法

以下是 Alter Table Alter Column 命令的通用语法。

ALTER TABLE [ IF EXISTS ] tableName ALTER COLUMN columnName 
{ { dataType [ DEFAULT expression ] [ [ NOT ] NULL ] [ AUTO_INCREMENT | IDENTITY ] } 
| { RENAME TO name } 
| { RESTART WITH long } 
| { SELECTIVITY int } 
| { SET DEFAULT expression } 
| { SET NULL } 
| { SET NOT NULL } } 

在上述语法中 –

  • RESTART – 命令更改自动增量列的下一个值。

  • SELECTIVITY – 命令设置列的选择性(1-100)。基于选择性值,我们可以对列的值进行成像。

  • SET DEFAULT – 更改列的默认值。

  • SET NULL – 将列设置为允许 NULL。

  • SET NOT NULL – 将列设置为允许 NOT NULL。

例子

在此示例中,我们将使用以下查询将表tutorials_tbl的列Title重命名Tutorial_Title

ALTER TABLE tutorials_tbl ALTER COLUMN title RENAME TO tutorial_title; 

上述查询产生以下输出。

(0) row(s) effected 

以类似的方式,我们可以使用 ALTER 命令执行不同的场景。

H2 数据库 – 删除

DROP 是取自通用 SQL 语法的命令。该命令用于从内存中删除数据库组件及其结构。我们将在本章中讨论 Drop 命令的不同场景。

删除表

Drop Table 是删除相应表及其结构的命令。

句法

以下是 Drop Table 命令的通用语法。

DROP TABLE [ IF EXISTS ] tableName [,...] [ RESTRICT | CASCADE ]

如果我们使用 RESTRICT 并且存在具有依赖视图的表,则该命令将失败。当我们使用 CASCADE 关键字时,所有依赖视图都将被删除。

例子

在此示例中,我们将使用以下查询删除名为 test 的表。

DROP TABLE test;

上述查询产生以下输出。

(6) row (s) effected 

删除架构

Drop Schema 是从数据库服务器中删除相应模式的命令。它不适用于当前模式。

句法

DROP SCHEMA [ IF EXISTS ] schemaName 

例子

在此示例中,我们将使用以下查询删除名为test_schema的模式

DROP SCHEMA TEST_SCHEMA; 

上述查询产生以下输出。

(0) row(s) effected

掉落顺序

Drop Sequence 是用于从表结构中删除序列的命令。

句法

以下是 Drop Sequence 命令的通用语法。

DROP SEQUENCE [ IF EXISTS ] sequenceName

此命令在此连接中提交一个打开的事务。

例子

在这个例子中,我们将删除一个名为sequence_id 的序列以下是命令。

DROP SEQUENCE sequence_id;

上述命令产生以下输出。

(0) row (s) effected 

拖放视图

Drop View 是用于删除现有视图的命令。如果使用 CASCADE 子句,所有相关视图也会被删除。

句法

以下是 Drop View 命令的通用语法。

DROP VIEW [ IF EXISTS ] viewName [ RESTRICT | CASCADE ]

例子

在此示例中,我们将使用以下查询删除名为sample_view的视图

DROP VIEW sample_view;

上述查询产生以下输出。

(0) row (s) effected 

H2 数据库 – 截断

TRUNCATE 是用于从表中删除数据的命令。与不带 WHERE 子句的 DELETE FROM 不同,此命令无法回滚。此命令在此连接中提交一个打开的事务。

句法

以下是 truncate 命令的通用语法。

TRUNCATE TABLE tableName 

例子

在此示例中,我们将使用以下查询截断名为test的表

TRUNCATE TABLE test;

上述查询产生以下输出。

(6) row (s) effected 

H2 数据库 – 提交

COMMIT 是 SQL 语法中用于提交事务的命令。我们可以提交特定事务,也可以提交当前执行的事务。

句法

COMMIT 命令有两种不同的语法。

以下是用于提交当前事务的 commit 命令的通用语法。

COMMIT [ WORK ] 

以下是用于提交特定事务的 commit 命令的通用语法。

COMMIT TRANSACTION transactionName

示例 1

在此示例中,让我们使用以下命令提交当前事务。

COMMIT

上述命令产生以下输出。

Committed successfully

示例 2

在本例中,我们将使用以下命令提交名为tx_test的事务

COMMIT TRANSACTION tx_test;

上述命令产生以下输出。

Committed successfully 

H2 数据库 – 授予

Grant 是来自 SQL 语法的命令,用于向表、用户或角色授予权限。执行此命令需要管理员权限。此命令在此连接中提交一个打开的事务。

在本章中,我们将讨论 Grant 命令的不同场景。

授予权利

授予权限是向表、用户或角色提供管理员权限的命令。

句法

以下是 Grant 命令的通用语法。

GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } [,...] ON 
{ { SCHEMA schemaName } | { tableName [,...] } } 
TO { PUBLIC | userName | roleName }

例子

在此示例中,我们将使用以下命令将测试表授予只读权限。

GRANT SELECT ON TEST TO READONLY

上述命令产生以下输出。

Grant successfully

授予更改任何架构

Grant Alter Any Schema 是向相应用户授予架构更改权限的命令。

句法

以下是 Grant Alter Any Schema 命令的通用语法。

GRANT ALTER ANY SCHEMA TO userName 

例子

在此示例中,我们将向名为test_user的用户授予架构的更改权限确保 test_user 存在。以下是授予更改权限的查询。

GRANT ALTER ANY SCHEMA TO test_user;

上述查询产生以下输出。

Granted successfully to test_user

H2 数据库 – 保存点

SAVEPOINT 是用于临时保存交易的命令。最好在事务中维护保存点,因为在必要时将事务回滚到相应的保存点会很有帮助。

句法

以下是 Savepoint 命令的通用语法。

SAVEPOINT savepointName

例子

在本例中,我们将使用以下命令创建一个名为 Half_Done 的保存点。

SAVEPOINT Half_Done; 

上述命令产生以下输出。

Savepoint created

H2 数据库 – 回滚

ROLLBACK 是 SQL 语法中的一个命令,用于将事务回滚到保存点或前一个事务。通过使用此命令,我们可以回滚到特定的保存点,也可以回滚到之前执行的事务。

句法

ROLLABCK 命令有两种不同的语法。

以下是回滚命令的通用语法。

ROLLBACK [ TO SAVEPOINT savepointName ] 

以下是特定事务的回滚命令的通用语法。

ROLLBACK TRANSACTION transactionName 

示例 1

在此示例中,我们将使用以下命令将当前事务回滚到名为sp1_test的保存点

ROLLBACK sp1_test; 

上述命令产生以下输出。

Rollback successfully 

示例 2

在下面的示例中,我们将使用给定的命令回滚名为tx_test的完整事务

ROLLBACK TRANSACTION tx_test;

上述命令产生以下输出。

Rollback successfully 

H2 数据库 – JDBC 连接

H2是一个JAVA数据库。我们可以使用 JDBC 与这个数据库进行交互。在本章中,我们将看到如何创建与 H2 数据库的 JDBC 连接以及与 H2 数据库的 CRUD 操作。

通常,创建 JDBC 连接有五个步骤。

步骤 1 – 注册 JDBC 数据库驱动程序。

Class.forName ("org.h2.Driver"); 

步骤 2 – 打开连接。

Connection conn = DriverManager.getConnection ("jdbc:h2:~/test", "sa",""); 

第 3 步– 创建声明。

Statement st = conn.createStatement(); 

步骤 4 – 执行语句并接收结果集。

Stmt.executeUpdate("sql statement"); 

步骤 5 – 关闭连接。

conn.close(); 

在继续创建完整程序之前,我们需要将h2-1.4.192.jar 文件添加到 CLASSPATH。我们可以从文件夹C:\Program Files (x86)\H2\bin 中获取这个jar

创建表

在这个例子中,我们将编写一个创建表的程序。考虑一个名为Registration的表,它具有以下字段。

S.No 列名 数据类型 非空 首要的关键
1 ID 数字 是的 是的
2 第一的 瓦尔查尔(255)
3 最后的 瓦尔查尔(255)
4 年龄 数字

下面是一个名为H2jdbcCreateDemo的示例程序

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement;  

public class H2jdbcCreateDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
             
         //STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         //STEP 3: Execute a query 
         System.out.println("Creating table in given database..."); 
         stmt = conn.createStatement(); 
         String sql =  "CREATE TABLE   REGISTRATION " + 
            "(id INTEGER not NULL, " + 
            " first VARCHAR(255), " +  
            " last VARCHAR(255), " +  
            " age INTEGER, " +  
            " PRIMARY KEY ( id ))";  
         stmt.executeUpdate(sql);
         System.out.println("Created table in given database..."); 
         
         // STEP 4: Clean-up environment 
         stmt.close(); 
         conn.close(); 
      } catch(SQLException se) { 
         //Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         //Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         //finally block used to close resources 
         try{ 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se){ 
            se.printStackTrace(); 
         } //end finally try 
      } //end try 
      System.out.println("Goodbye!");
   } 
}

将上述程序保存到 H2jdbcCreateDemo.java 中。通过在命令提示符下执行以下命令来编译并执行上述程序。

\>javac H2jdbcCreateDemo.java 
\>java H2jdbcCreateDemo 

上述命令产生以下输出。

Connecting to database... 
Creating table in given database... 
Created table in given database... 
Goodbye!

执行完后,我们可以查看使用H2 SQL接口创建的表。

插入记录

在这个例子中,我们将编写一个插入记录的程序。让我们将以下记录插入到表Registration 中。

ID 第一的 最后的 年龄
100 扎拉 阿里 18
101 马纳兹 法特玛 25
102 扎伊德 30
103 萨米特 米塔尔 28

下面是一个名为H2jdbcInsertDemo的示例程序

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement;  

public class H2jdbcInsertDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try{
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER);  
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to a selected database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS); 
         System.out.println("Connected database successfully..."); 
         
         // STEP 3: Execute a query 
         stmt = conn.createStatement();  
         String sql = "INSERT INTO Registration " + "VALUES (100, 'Zara', 'Ali', 18)"; 
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES (101, 'Mahnaz', 'Fatma', 25)";  
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES (102, 'Zaid', 'Khan', 30)"; 
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES(103, 'Sumit', 'Mittal', 28)"; 
         
         stmt.executeUpdate(sql); 
         System.out.println("Inserted records into the table..."); 
         
         // STEP 4: Clean-up environment 
         stmt.close(); 
         conn.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try {
            if(stmt!=null) stmt.close();  
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

将上述程序保存到 H2jdbcInsertDemo.java 中。通过在命令提示符下执行以下命令来编译并执行上述程序。

\>javac H2jdbcInsertDemo.java 
\>java H2jdbcInsertDemo 

上述命令产生以下输出。

Connecting to a selected database... 
Connected database successfully... 
Inserted records into the table... 
Goodbye! 

读取记录

在这个例子中,我们将编写一个读取记录的程序。让我们尝试从表Registration 中读取所有记录

下面是一个名为H2jdbcRecordDemo的示例程序

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement;  

public class H2jdbcReadDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
   
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query 
         System.out.println("Connected database successfully..."); 
         stmt = conn.createStatement(); 
         String sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql); 
         
         // STEP 4: Extract data from result set 
         while(rs.next()) { 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         // STEP 5: Clean-up environment 
         rs.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try { 
            if(stmt!=null) stmt.close();  
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

将上述程序保存到 H2jdbcReadDemo.java 中。通过在命令提示符下执行以下命令来编译并执行上述程序。

\>javac H2jdbcReadDemo.java 
\>java H2jdbcReadDemo 

上述命令产生以下输出。

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 18, First: Zara, Last: Ali 
ID: 101, Age: 25, First: Mahnaz, Last: Fatma 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye!

更新记录

在这个例子中,我们将编写一个程序来更新记录。让我们尝试从表Registration 中读取所有记录

下面是一个名为H2jdbcUpdateDemo的示例程序

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement;  

public class H2jdbcUpdateDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   // Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
   
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to a database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query 
         System.out.println("Connected database successfully..."); 
         stmt = conn.createStatement(); 
         String sql = "UPDATE Registration " + "SET age = 30 WHERE id in (100, 101)"; 
         stmt.executeUpdate(sql);  
         
         // Now you can extract all the records 
         // to see the updated records 
         sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql);  
         
         while(rs.next()){ 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         rs.close();    
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources  
         try { 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
} 

将上述程序保存到 H2jdbcUpdateDemo.java 中。通过在命令提示符下执行以下命令来编译并执行上述程序。

\>javac H2jdbcUpdateDemo.java 
\>java H2jdbcUpdateDemo 

上述命令产生以下输出。

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 30, First: Zara, Last: Ali 
ID: 101, Age: 30, First: Mahnaz, Last: Fatma 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye!

删除记录

在这个例子中,我们将编写一个程序来删除记录。让我们尝试从表Registration 中读取所有记录

下面是一个名为H2jdbcDeleteDemo的示例程序

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement;  

public class H2jdbcDeleteDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   // Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER);  
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query
         System.out.println("Creating table in given database..."); 
         stmt = conn.createStatement();  
         String sql = "DELETE FROM Registration " + "WHERE id = 101"; 
         stmt.executeUpdate(sql);  
         
         // Now you can extract all the records 
         // to see the remaining records 
         sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql);  
         
         while(rs.next()){ 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         rs.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace();  
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try { 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

将上述程序保存到 H2jdbcDeleteDemo.java 中。通过在命令提示符下执行以下命令来编译并执行上述程序。

\>javac H2jdbcDeleteDemo.java 
\>java H2jdbcDeleteDemo

上述命令产生以下输出。

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 30, First: Zara, Last: Ali 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye! 

觉得文章有用?

点个广告表达一下你的爱意吧 !😁