H2数据库-简介


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

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

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

H2数据库的功能

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

  • 这是一个非常快的数据库引擎。
  • H2是开源的,并用Java编写。
  • 它支持标准的SQL和JDBC API。它也可以使用PostgreSQL ODBC驱动程序。
  • 它具有嵌入式和服务器模式。
  • H2支持集群多版本并发
  • 它具有强大的安全功能。

附加功能

以下是H2数据库的一些其他功能-

  • H2是基于磁盘的或内存中的数据库和表,只读数据库支持,临时表。
  • H2提供事务支持(已提交读),两阶段提交的多个连接,表级锁定。
  • H2是基于成本的优化程序,使用遗传算法进行复杂查询(零管理)。
  • H2包含可滚动和可更新的结果集支持,大结果集,外部结果排序,函数可以返回结果集。
  • H2支持加密数据库(AES),SHA-256密码加密,加密功能和SSL。

H2数据库中的组件

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

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

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

H2数据库-安装

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

验证Java安装

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

<span style="color:rgba(0, 0, 0, 0.87)">java –version
</span>

如果JDk成功安装在系统中,那么我们将获得以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">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)
</span>

如果系统中未安装JDK,则访问下面的Install JDK链接。

安装H2数据库

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

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

步骤1:下载H2设定档

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

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

步骤2:安装H2数据库

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

以下屏幕是安装过程的第一步。提供一个我们要在其中安装H2数据库服务器的路径,如以下屏幕快照所示。

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

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

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

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

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

在上面的对话框中填写所有详细信息,例如“保存的设置”,“设置名称”,“驱动程序类”,“ JDBC URL”,“用户名”和“密码”。在JDBC URL中,指定数据库的位置和数据库名称。用户名和密码是数据库的用户名和密码的字段。单击连接。

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

H2数据库-选择

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

句法

SELECT语句的基本语法如下-

<span style="color:rgba(0, 0, 0, 0.87)">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 ]
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM table_name;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+ 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">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);</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT ID, NAME, SALARY FROM CUSTOMERS;</span>

上面的命令产生以下结果。

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+----------+ 
| 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 | 
+----+----------+----------+ 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SQL> SELECT * FROM CUSTOMERS;</span>

上面的查询产生以下结果-

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+ 
</span>

H2数据库-插入

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">INSERT INTO tableName 
{ [ ( columnName [,...] ) ] 
{ VALUES 
{ ( { DEFAULT | expression } [,...] ) } [,...] | [ DIRECT ] [ SORTED ] select } } | 
{ SET { columnName = { DEFAULT | expression } } [,...] }
</span>

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

让我们以一个示例为例,尝试将以下给定记录插入到Customer表中。

ID

名称

年龄

地址

薪水

1个

拉梅什

32

艾哈迈达巴德

2000

2

吉兰

25

新德里

1500

3

考希克

23

哥打

2000

4

柴尾

25

孟买

6500

5

哈迪克

27

博帕尔

8500

6

科马尔

22

MP

4500

7

玛菲

24

印多尔

10000

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

<span style="color:rgba(0, 0, 0, 0.87)">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); 
</span>

H2数据库-更新

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">UPDATE tableName [ [ AS ] newTableAlias ] SET 
{ { columnName = { DEFAULT | expression } } [,...] } | 
{ ( columnName [,...] ) = ( select ) } 
[ WHERE expression ] [ ORDER BY order [,...] ] [ LIMIT expression ]
</span>

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

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

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+ 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">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);
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">UPDATE CUSTOMERS SET ADDRESS = 'Pune' WHERE ID = 6;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM CUSTOMERS;
</span>

上面的查询产生以下结果。

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+ 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">UPDATE CUSTOMERS SET ADDRESS = 'Pune', SALARY = 1000.00; 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM CUSTOMERS;
</span>

上面的查询产生以下结果-

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+---------+---------+ 
| 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 | 
+----+----------+-----+---------+---------+ 
</span>

H2数据库-删除

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">DELETE [ TOP term ] FROM tableName [ WHERE expression ] [ LIMIT term ]
</span>

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

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

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">DELETE FROM CUSTOMERS WHERE ID = 6;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM CUSTOMERS; </span>

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

<span style="color:rgba(0, 0, 0, 0.87)">+----+----------+-----+-----------+----------+ 
| 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 | 
+----+----------+-----+-----------+----------+ 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">DELETE FROM CUSTOMER; 
</span>

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

H2数据库-备份

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">BACKUP TO fileNameString;
</span>

在此示例中,让我们将当前数据库的备份复制backup.zip文件中。相同地使用以下命令。

<span style="color:rgba(0, 0, 0, 0.87)">BACKUP TO 'backup.zip';</span>

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

H2数据库-通话

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">CALL expression;
</span>

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

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

<span style="color:rgba(0, 0, 0, 0.87)">CALL 15*25; 
</span>

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

375

375

H2数据库-说明

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">EXPLAIN { [ PLAN FOR ] | ANALYZE } { select | insert | update | delete | merge} 
</span>

连同此语法,我们可以使用选择,插入,删除和合并。

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

<span style="color:rgba(0, 0, 0, 0.87)">EXPLAIN SELECT * FROM CUSTOMER WHERE ID = 1;
</span>

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

H2数据库-合并

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">MERGE INTO tableName [ ( columnName [,...] ) ] 
[ KEY ( columnName [,...] ) ] 
{ VALUES { ( { DEFAULT | expression } [,...] ) } [,...] | select } 
</span>

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

在此示例中,让我们尝试将新记录添加到“客户”表中。以下是表中新记录的详细信息。

栏名


ID

8

名称

洛克希

年龄

32

地址

海得拉巴

薪水

2500

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

<span style="color:rgba(0, 0, 0, 0.87)">MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Lokesh', 32, 'Hyderabad', 2500);
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">Update count: 1 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM CUSTOMER;</span>

上面的查询产生以下输出。

ID

名称

年龄

地址

薪水

1个

拉梅什

32

艾哈迈达巴德

2000

2

吉兰

25

新德里

1500

3

考希克

23

哥打

2000

4

Chaitali

25

孟买

6500

5

哈迪克

27

博帕尔

8500

6

科马尔

22

MP

4500

7

玛菲

24

印多尔

10000

8

洛克希

32

海得拉巴

2500

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

栏名


ID

8

名称

洛基

年龄

32

地址

海得拉巴

薪水

3000

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

<span style="color:rgba(0, 0, 0, 0.87)">MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Loki', 32, 'Hyderabad', 3000);
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">Update count: 1 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SELECT * FROM CUSTOMER; 
</span>

上面的查询产生以下输出-

ID

名称

年龄

地址

薪水

1个

拉梅什

32

艾哈迈达巴德

2000

2

吉兰

25

新德里

1500

3

考希克

23

哥打

2000

4

Chaitali

25

孟买

6500

5

哈迪克

27

博帕尔

8500

6

科马尔

22

MP

4500

7

玛菲

24

印多尔

10000

8

洛基

32

海得拉巴

3000

H2数据库-显示

SHOW是用于显示表的架构,表或列的列表的命令。

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">SHOW { SCHEMAS | TABLES [ FROM schemaName ] | 
COLUMNS FROM tableName [ FROM schemaName ] } 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SHOW TABLES; </span>

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

TABLE_NAME

TABLE_SCHEMA

顾客

上市

电磁脉冲

上市

H2数据库-创建

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

建立表格

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">CREATE [ CACHED | MEMORY ] [ TEMP | [ GLOBAL | LOCAL ] TEMPORARY ] 
TABLE [ IF NOT EXISTS ] name 
[ ( { columnDefinition | constraint } [,...] ) ] 
[ ENGINE tableEngineName [ WITH tableEngineParamName [,...] ] ] 
[ NOT PERSISTENT ] [ TRANSACTIONAL ] 
[ AS select ] 
</span>

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

  • CACHED -缓存表是常规表的默认类型。这意味着行数不受主存储器的限制。
  • 内存-内存表是临时表的默认类型。这意味着内存表不应太大,索引数据将保留在主内存中。
  • TEMPORARY-在关闭或打开数据库时删除临时表。基本上,临时表有两种类型-
  • 全局类型-所有连接均可访问。
  • 本地类型-当前连接可访问。

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

  • ENGINE-仅当使用自定义表实现时才需要ENGINE选项。
  • NOT PERSISTENT-这是一个修饰符,用于将完整的表数据保留在内存中,并且在关闭数据库时所有行都会丢失。
  • TRANSACTIONAL-这是一个提交开放事务的关键字,此命令仅支持临时表。

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

序号

栏名

数据类型

1个

ID

整数

2

标题

Varchar(50)

3

作者

Varchar(20)

4

提交日期

日期

以下查询用于与给定的列数据一起创建表tutorials_tbl

<span style="color:rgba(0, 0, 0, 0.87)">CREATE TABLE tutorials_tbl ( 
   id INT NOT NULL, 
   title VARCHAR(50) NOT NULL, 
   author VARCHAR(20) NOT NULL, 
   submission_date DATE 
);
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(0) rows effected 
</span>

创建架构

创建模式是用于在特定授权下(在当前注册的用户下)创建与用户相关的模式的命令。

句法

以下是“创建模式”命令的通用语法。

<span style="color:rgba(0, 0, 0, 0.87)">CREATE SCHEMA [ IF NOT EXISTS ] name [ AUTHORIZATION ownerUserName ] 
</span>

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

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

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

<span style="color:rgba(0, 0, 0, 0.87)">CREATE SCHEMA test_schema AUTHORIZATION sa; </span>

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

<span style="color:rgba(0, 0, 0, 0.87)">(0) rows effected 
</span>

创建序列

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

句法

以下是create sequence命令的通用语法。

<span style="color:rgba(0, 0, 0, 0.87)">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 ] 
</span>

此通用语法用于创建序列。序列的数据类型为BIGINT。按照这种顺序,即使回滚了事务,也永远不会重复使用值。

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

<span style="color:rgba(0, 0, 0, 0.87)">CREATE SEQUENCE SEQ_ID; </span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(0) rows effected 
</span>

H2数据库-更改

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

修改表添加

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE [ IF EXISTS ] tableName ADD [ COLUMN ] 
{ [ IF NOT EXISTS ] columnDefinition [ { BEFORE | AFTER } columnName ] 
   | ( { columnDefinition } [,...] ) }
</span>

在此示例中,我们将在表tutorials_tbl中添加新列start_date。start_date的数据类型为Date。以下是添加新列的查询。

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE tutorials_tbl ADD start_date DATE;</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(6) rows effected 
</span>

更改表添加约束

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

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE [ IF EXISTS ] tableName ADD constraint [ CHECK | NOCHECK ] 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE tutorials_tbl ADD CONSTRAINT tutorials_tbl_pk PRIMARYKEY(id); </span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(6) row (s) effected
</span>

更改表重命名约束

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE [ IF EXISTS ] tableName RENAME oldConstraintName TO newConstraintName
</span>

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

在此示例中,我们将表tutorials_tbl的主键约束名称从tutorials_tbl_pk更改为tutorials_tbl_pk_constraint。以下是这样做的查询。

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE tutorials_tbl RENAME CONSTRAINT 
tutorials_tbl_pk TO tutorials_tbl_pk_constraint;</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(1) row (s) effected 
</span>

变更表变更列

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">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 } } 
</span>

在上面的语法中-

  • RESTART-命令更改自动递增列的下一个值。
  • SELECTIVITY-命令设置列的选择性(1-100)。基于选择性值,我们可以对列的值进行成像。
  • SET DEFAULT-更改列的默认值。
  • SET NULL-将列设置为允许NULL。
  • SET NOT NULL-将列设置为允许NOT NULL。

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

<span style="color:rgba(0, 0, 0, 0.87)">ALTER TABLE tutorials_tbl ALTER COLUMN title RENAME TO tutorial_title; 
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(0) row(s) effected 
</span>

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

H2数据库-删除

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

放置表

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP TABLE [ IF EXISTS ] tableName [,...] [ RESTRICT | CASCADE ]
</span>

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

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP TABLE test;
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(6) row (s) effected 
</span>

删除架构

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

句法

<span style="color:rgba(0, 0, 0, 0.87)">DROP SCHEMA [ IF EXISTS ] schemaName 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP SCHEMA TEST_SCHEMA; 
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(0) row(s) effected
</span>

掉落顺序

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

句法

以下是“丢弃序列”命令的通用语法。

<span style="color:rgba(0, 0, 0, 0.87)">DROP SEQUENCE [ IF EXISTS ] sequenceName
</span>

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

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP SEQUENCE sequence_id;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">(0) row (s) effected 
</span>

放下视图

删除视图是用于删除现有视图的命令。如果使用CASCADE子句,所有从属视图也将被删除。

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP VIEW [ IF EXISTS ] viewName [ RESTRICT | CASCADE ]
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">DROP VIEW sample_view;
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(0) row (s) effected 
</span>

H2数据库-截断

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">TRUNCATE TABLE tableName 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">TRUNCATE TABLE test;
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">(6) row (s) effected 
</span>

H2数据库-提交

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

句法

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

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

<span style="color:rgba(0, 0, 0, 0.87)">COMMIT [ WORK ] 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">COMMIT TRANSACTION transactionName
</span>

例子1

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

<span style="color:rgba(0, 0, 0, 0.87)">COMMIT
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Committed successfully
</span>

例子2

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

<span style="color:rgba(0, 0, 0, 0.87)">COMMIT TRANSACTION tx_test;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Committed successfully 
</span>

H2数据库-Grant

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

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

授予权

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } [,...] ON 
{ { SCHEMA schemaName } | { tableName [,...] } } 
TO { PUBLIC | userName | roleName }
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">GRANT SELECT ON TEST TO READONLY
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Grant successfully
</span>

授予更改任何架构

授予任何模式更改许可是向相应用户授予模式更改权限的命令。

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">GRANT ALTER ANY SCHEMA TO userName 
</span>

在此示例中,我们将向一个名为test_user的用户授予更改模式的特权。确保test_user存在。以下是授予更改特权的查询。

<span style="color:rgba(0, 0, 0, 0.87)">GRANT ALTER ANY SCHEMA TO test_user;
</span>

上面的查询产生以下输出。

<span style="color:rgba(0, 0, 0, 0.87)">Granted successfully to test_user
</span>

H2数据库-保存点

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

句法

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

<span style="color:rgba(0, 0, 0, 0.87)">SAVEPOINT savepointName
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">SAVEPOINT Half_Done; </span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Savepoint created
</span>

H2数据库-回滚

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

句法

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

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

<span style="color:rgba(0, 0, 0, 0.87)">ROLLBACK [ TO SAVEPOINT savepointName ] 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">ROLLBACK TRANSACTION transactionName 
</span>

例子1

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

<span style="color:rgba(0, 0, 0, 0.87)">ROLLBACK sp1_test; 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Rollback successfully 
</span>

例子2

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

<span style="color:rgba(0, 0, 0, 0.87)">ROLLBACK TRANSACTION tx_test;
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Rollback successfully 
</span>

H2数据库-JDBC连接

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

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

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

<span style="color:rgba(0, 0, 0, 0.87)">Class.forName ("org.h2.Driver"); 
</span>

步骤2-打开连接。

<span style="color:rgba(0, 0, 0, 0.87)">Connection conn = DriverManager.getConnection ("jdbc:h2:~/test", "sa",""); 
</span>

步骤3-创建一条语句。

<span style="color:rgba(0, 0, 0, 0.87)">Statement st = conn.createStatement(); 
</span>

步骤4-执行一条语句并接收结果集。

<span style="color:rgba(0, 0, 0, 0.87)">Stmt.executeUpdate("sql statement"); 
</span>

步骤5-关闭连接。

<span style="color:rgba(0, 0, 0, 0.87)">conn.close(); 
</span>

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

建立表格

在此示例中,我们将编写一个用于创建表的程序。考虑一个名为Registration的表,该表具有以下字段。

序号

栏名

数据类型

非空

首要的关键

1个

ID




2

第一

瓦尔查(255)

没有

没有

3

持续

瓦尔查(255)

没有

没有

4

年龄


没有

没有

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

<span style="color:rgba(0, 0, 0, 0.87)">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!");
   } 
}</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">\>javac H2jdbcCreateDemo.java 
\>java H2jdbcCreateDemo 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Connecting to database... 
Creating table in given database... 
Created table in given database... 
Goodbye!
</span>

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

插入记录

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

ID

第一

持续

年龄

100

扎拉

阿里

18岁

101

马纳兹

法特玛

25

102

扎伊德

可汗

30

103

住友

道德的

28

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

<span style="color:rgba(0, 0, 0, 0.87)">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!"); 
   } 
}</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">\>javac H2jdbcInsertDemo.java 
\>java H2jdbcInsertDemo 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">Connecting to a selected database... 
Connected database successfully... 
Inserted records into the table... 
Goodbye! 
</span>

读取记录

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

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

<span style="color:rgba(0, 0, 0, 0.87)">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!"); 
   } 
}</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">\>javac H2jdbcReadDemo.java 
\>java H2jdbcReadDemo 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">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!
</span>

更新记录

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

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

<span style="color:rgba(0, 0, 0, 0.87)">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!"); 
   } 
} </span>

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

<span style="color:rgba(0, 0, 0, 0.87)">\>javac H2jdbcUpdateDemo.java 
\>java H2jdbcUpdateDemo 
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">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!
</span>

删除记录

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

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

<span style="color:rgba(0, 0, 0, 0.87)">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!"); 
   } 
}</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">\>javac H2jdbcDeleteDemo.java 
\>java H2jdbcDeleteDemo
</span>

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

<span style="color:rgba(0, 0, 0, 0.87)">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! </span>