
- H2 資料庫教程
- H2 資料庫 - 首頁
- H2 資料庫 - 簡介
- H2 資料庫 - 安裝
- H2 資料庫 - 資料操作
- H2 資料庫 - 查詢 (Select)
- H2 資料庫 - 插入 (Insert)
- H2 資料庫 - 更新 (Update)
- H2 資料庫 - 刪除 (Delete)
- H2 資料庫 - 備份
- H2 資料庫 - 呼叫 (Call)
- H2 資料庫 - 解釋 (Explain)
- H2 資料庫 - 合併 (Merge)
- H2 資料庫 - 顯示 (Show)
- H2 資料庫 - 資料定義
- H2 資料庫 - 建立 (Create)
- H2 資料庫 - 修改 (Alter)
- H2 資料庫 - 刪除 (Drop)
- H2 資料庫 - 截斷 (Truncate)
- H2 資料庫 - 提交 (Commit)
- H2 資料庫 - 授權 (Grant)
- H2 資料庫 - 儲存點 (Savepoint)
- H2 資料庫 - 回滾 (Rollback)
- H2 資料庫 - JDBC 連線
- H2 資料庫有用資源
- H2 資料庫 - 快速指南
- H2 資料庫 - 有用資源
- 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 提供事務支援(讀已提交),兩階段提交,多個連線,表級鎖。
H2 是一個基於成本的最佳化器,使用遺傳演算法處理複雜查詢,零管理。
H2 包含可滾動和可更新的結果集支援,大型結果集,外部結果排序,函式可以返回結果集。
H2 支援加密資料庫 (AES),SHA-256 密碼加密,加密函式和 SSL。
H2 資料庫中的元件
為了使用 H2 資料庫,您需要具備以下元件:
- 一個 Web 瀏覽器
- 一個 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 安裝程式型別(即 .exe 檔案),另一種是適用於其他作業系統的平臺無關 zip 檔案。
單擊 Windows 安裝程式以下載支援 Windows 的 H2 資料庫,下載 .exe 檔案後。在本例中,我們使用版本為 1.4.192 的 H2 資料庫。
步驟 2:安裝 H2 資料庫
下載後,我們在下載目錄中獲得 H2 Windows 安裝程式檔案(即 h2-setup-yyyy-mm-dd.exe)。要啟動 H2 資料庫的安裝過程,請雙擊安裝程式檔案。
以下螢幕是安裝過程的第一步。提供我們想要安裝 H2 資料庫伺服器的路徑,如下面的螢幕截圖所示。

如上圖所示,預設情況下它將採用C:\ProgramFiles (x86)\H2作為目標資料夾。單擊下一步繼續到下一步。將彈出以下螢幕。

在上圖中,單擊“安裝”按鈕以啟動安裝過程。安裝後,我們將看到以下螢幕截圖。

單擊“完成”以完成安裝過程。
步驟 3:驗證 H2 資料庫安裝
安裝後,讓我們驗證系統中的資料庫安裝。單擊 Windows → 輸入 H2 Console → 單擊 H2 控制檯圖示。連線到 URL https://:8082。連線時,H2 資料庫將要求進行資料庫註冊,如下面的螢幕截圖所示。

在上面的對話方塊中填寫所有詳細資訊,例如已儲存的設定、設定名稱、驅動程式類、JDBC URL、使用者名稱和密碼。在 JDBC URL 中,指定資料庫的位置和資料庫名稱。使用者名稱和密碼是資料庫使用者名稱和密碼的欄位。單擊連線。
資料庫歡迎頁面將彈出,如下面的螢幕截圖所示。

H2 資料庫 - 查詢 (Select)
SELECT 語句用於從一個或多個表中提取記錄資料。如果我們設計一個 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、Name 和 Salary 欄位。
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 資料庫 - 插入 (Insert)
SQL INSERT 語句用於向資料庫中的表新增新的資料行。
語法
以下是 INSERT INTO 語句的基本語法。
INSERT INTO tableName { [ ( columnName [,...] ) ] { VALUES { ( { DEFAULT | expression } [,...] ) } [,...] | [ DIRECT ] [ SORTED ] select } } | { SET { columnName = { DEFAULT | expression } } [,...] }
使用此 INSERT 語句,我們可以向表中插入新記錄或新行。當使用 DIRECT 子句時,結果將直接影響目標表,無需任何中間步驟。但是,在為表的所有列新增值時,請確保值的順序與表中的列順序相同。
示例
讓我們舉個例子,嘗試將以下給定的記錄插入 Customer 表。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000 |
2 | Khilan | 25 | Delhi | 1500 |
3 | Kaushik | 23 | Kota | 2000 |
4 | Chaitail | 25 | Mumbai | 6500 |
5 | Hardik | 27 | Bhopal | 8500 |
6 | Komal | 22 | MP | 4500 |
7 | Muffy | 24 | Indore | 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)
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 資料庫 - 刪除 (Delete)
SQL DELETE 查詢用於從表中刪除現有記錄。我們可以將 WHERE 子句與 DELETE 查詢一起使用以刪除選定的記錄,否則所有記錄都將被刪除。
語法
以下是 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 命令的通用語法。
BACKUP TO fileNameString;
示例
在這個例子中,讓我們將當前資料庫備份到backup.zip檔案中。為此,請使用以下命令。
BACKUP TO 'backup.zip';
執行上述命令後,您將在本地檔案系統中獲得 backup.zip 檔案。
H2 資料庫 - 呼叫 (Call)
CALL 是一個屬於 H2 資料庫伺服器的 SQL 命令。此命令用於計算簡單的表示式。它將給定表示式的結果返回到單個列欄位中。當它返回一個結果陣列時,陣列中的每個元素都將顯示為列值。
語法
以下是 CALL 命令的通用語法。
CALL expression;
我們可以在此語法中使用算術表示式。
示例
讓我們來看一個例子,使用call命令執行算術表示式(15 * 25)。
CALL 15*25;
以上命令產生以下輸出。
375 |
---|
375 |
H2 資料庫 - 解釋 (Explain)
EXPLAIN命令顯示語句的執行計劃。當我們使用EXPLAIN ANALYZE命令執行語句時,查詢計劃將包含每個表的實際行掃描計數。
語法
以下是EXPLAIN命令的通用語法。
EXPLAIN { [ PLAN FOR ] | ANALYZE } { select | insert | update | delete | merge}
除了這個語法,我們還可以使用select、insert、delete和merge。
示例
此示例解釋了ID為1的客戶的查詢計劃詳細資訊。
EXPLAIN SELECT * FROM CUSTOMER WHERE ID = 1;
上述命令產生以下輸出:

H2 資料庫 - 合併 (Merge)
MERGE命令用於更新現有行並將新行插入表中。主鍵列在此命令中起著重要作用;它用於查詢行。
語法
以下是MERGE命令的通用語法。
MERGE INTO tableName [ ( columnName [,...] ) ] [ KEY ( columnName [,...] ) ] { VALUES { ( { DEFAULT | expression } [,...] ) } [,...] | select }
在上述語法中,KEY子句用於指定主鍵列名。結合VALUES子句,我們可以使用原始值進行插入,也可以使用select命令檢索並存儲另一個表的數值到此表中。
示例
在這個例子中,讓我們嘗試向Customers表中新增一條新記錄。以下是表中新記錄的詳細資訊。
列名 | 值 |
---|---|
ID | 8 |
NAME | Lokesh |
AGE | 32 |
ADDRESS | Hyderabad |
SALARY | 2500 |
使用以下查詢,讓我們將給定的記錄插入到H2資料庫查詢中。
MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Lokesh', 32, 'Hyderabad', 2500);
以上查詢產生以下輸出。
Update count: 1
讓我們透過執行以下查詢來驗證Customer表的記錄。
SELECT * FROM CUSTOMER;
以上查詢產生以下輸出。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000 |
2 | Khilan | 25 | Delhi | 1500 |
3 | Kaushik | 23 | Kota | 2000 |
4 | Chaitali | 25 | Mumbai | 6500 |
5 | Hardik | 27 | Bhopal | 8500 |
6 | Komal | 22 | MP | 4500 |
7 | Muffy | 24 | Indore | 10000 |
8 | Lokesh | 32 | Hyderabad | 2500 |
現在讓我們嘗試使用**Merge**命令更新記錄。以下是待更新記錄的詳細資訊。
列名 | 值 |
---|---|
ID | 8 |
NAME | Loki |
AGE | 32 |
ADDRESS | Hyderabad |
SALARY | 3000 |
使用以下查詢將給定的記錄插入到H2資料庫查詢中。
MERGE INTO CUSTOMER KEY (ID) VALUES (8, 'Loki', 32, 'Hyderabad', 3000);
以上查詢產生以下輸出。
Update count: 1
讓我們透過執行以下查詢來驗證Customer表的記錄。
SELECT * FROM CUSTOMER;
以上查詢產生以下輸出:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000 |
2 | Khilan | 25 | Delhi | 1500 |
3 | Kaushik | 23 | Kota | 2000 |
4 | Chaitali | 25 | Mumbai | 6500 |
5 | Hardik | 27 | Bhopal | 8500 |
6 | Komal | 22 | MP | 4500 |
7 | Muffy | 24 | Indore | 10000 |
8 | Loki | 32 | Hyderabad | 3000 |
H2 資料庫 - 顯示 (Show)
SHOW是一個用於顯示錶模式、表或列列表的命令。
語法
以下是SHOW命令的通用語法。
SHOW { SCHEMAS | TABLES [ FROM schemaName ] | COLUMNS FROM tableName [ FROM schemaName ] }
示例
可以使用以下命令獲取當前資料庫中的表列表。
SHOW TABLES;
以上命令產生以下輸出。
表名 | 表模式 |
---|---|
CUSTOMER | PUBLIC |
EMP | PUBLIC |
H2 資料庫 - 建立 (Create)
CREATE是用於在H2資料庫伺服器中建立表、模式、序列、檢視和使用者的通用SQL命令。
建立表
Create Table是一個用於在當前資料庫中建立使用者定義表的命令。
語法
以下是Create Table命令的通用語法。
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** - 關閉或開啟資料庫時將刪除臨時表。基本上,臨時表有兩種型別:
全域性型別 - 可被所有連線訪問。
本地型別 - 可被當前連線訪問。
臨時表的預設型別是全域性型別。除非使用CREATE CACHED TABLE建立臨時表,否則臨時表的索引儲存在主記憶體中。
**ENGINE** - 只有在使用自定義表實現時才需要ENGINE選項。
**NOT PERSISTENT** - 這是一個修飾符,用於將完整的表資料儲存在記憶體中,並且在關閉資料庫時所有行都將丟失。
**TRANSACTIONAL** - 這是一個提交開啟事務的關鍵字,此命令僅支援臨時表。
示例
在這個例子中,讓我們使用以下給定的資料建立一個名為tutorials_tbl的表。
序號 | 列名 | 資料型別 |
---|---|---|
1 | ID | Int |
2 | 標題 | Varchar(50) |
3 | 作者 | Varchar(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命令的通用語法。
CREATE SCHEMA [ IF NOT EXISTS ] name [ AUTHORIZATION ownerUserName ]
在上述通用語法中,AUTHORIZATION是一個用於提供相應使用者名稱關鍵字。此命令是可選的,這意味著如果我們沒有提供使用者名稱,則它將考慮當前使用者。執行該命令的使用者必須具有管理員許可權以及所有者許可權。
此命令會提交此連線中的開啟事務。
示例
在這個例子中,讓我們使用以下命令在SA使用者下建立一個名為**test_schema**的模式。
CREATE SCHEMA test_schema AUTHORIZATION sa;
以上命令產生以下輸出。
(0) rows effected
建立序列
序列是一個用於生成數字的概念,它遵循id或任何隨機列值的序列。
語法
以下是create sequence命令的通用語法。
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命令的各種場景。
Alter Table Add
Alter Table Add是一個用於向表新增新列以及相應資料型別的命令。此命令會提交此連線中的事務。
語法
以下是Alter Table Add命令的通用語法。
ALTER TABLE [ IF EXISTS ] tableName ADD [ COLUMN ] { [ IF NOT EXISTS ] columnDefinition [ { BEFORE | AFTER } columnName ] | ( { columnDefinition } [,...] ) }
示例
在這個例子中,我們將向表**tutorials_tbl**新增一個名為**start_date**的新列。start_date的資料型別為Date。以下是新增新列的查詢。
ALTER TABLE tutorials_tbl ADD start_date DATE;
以上查詢產生以下輸出。
(6) rows effected
Alter Table Add Constraint
Alter table add constraint是一個用於向表新增不同約束的命令,例如主鍵、外部索引鍵、not null等。
如果所需索引尚不存在,則會自動建立它們。無法停用唯一約束檢查。此命令會提交此連線中的開啟事務。
語法
以下是Alter table add constraint命令的通用語法。
ALTER TABLE [ IF EXISTS ] tableName ADD constraint [ CHECK | NOCHECK ]
示例
在這個例子中,讓我們使用以下查詢向表**tutorials_tbl**的id列新增一個主鍵約束**(tutorials_tbl_pk)**。
ALTER TABLE tutorials_tbl ADD CONSTRAINT tutorials_tbl_pk PRIMARYKEY(id);
以上查詢產生以下輸出。
(6) row (s) effected
Alter Table Rename Constraint
此命令用於重新命名特定關係表的約束名稱。此命令會提交此連線中的開啟事務。
語法
以下是Alter Table Rename Constraint命令的通用語法。
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 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** - 設定列不允許NULL。
示例
在這個例子中,我們將使用以下查詢將表**tutorials_tbl**的列名稱從**Title**重新命名為**Tutorial_Title**。
ALTER TABLE tutorials_tbl ALTER COLUMN title RENAME TO tutorial_title;
以上查詢產生以下輸出。
(0) row(s) effected
以類似的方式,我們可以使用ALTER命令執行不同的場景。
H2 資料庫 - 刪除 (Drop)
DROP是從通用SQL語法中提取的命令。此命令用於從記憶體中刪除資料庫元件及其結構。本章將討論DROP命令的不同場景。
Drop Table
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是一個從資料庫伺服器刪除相應模式的命令。它不能從當前模式工作。
語法
DROP SCHEMA [ IF EXISTS ] schemaName
示例
在這個例子中,我們將使用以下查詢刪除名為**test_schema**的模式。
DROP SCHEMA TEST_SCHEMA;
以上查詢產生以下輸出。
(0) row(s) effected
Drop Sequence
Drop Sequence是一個用於從表結構中刪除序列的命令。
語法
以下是Drop Sequence命令的通用語法。
DROP SEQUENCE [ IF EXISTS ] sequenceName
此命令會提交此連線中的開啟事務。
示例
在這個例子中,我們將刪除名為**sequence_id**的序列。以下是命令。
DROP SEQUENCE sequence_id;
以上命令產生以下輸出。
(0) row (s) effected
Drop View
Drop View是一個用於刪除現有檢視的命令。如果使用CASCADE子句,所有依賴檢視也將被刪除。
語法
以下是Drop View命令的通用語法。
DROP VIEW [ IF EXISTS ] viewName [ RESTRICT | CASCADE ]
示例
在這個例子中,我們將使用以下查詢刪除名為**sample_view**的檢視。
DROP VIEW sample_view;
以上查詢產生以下輸出。
(0) row (s) effected
H2 資料庫 - 截斷 (Truncate)
TRUNCATE是一個用於刪除表中資料的命令。與不帶WHERE子句的DELETE FROM不同,此命令無法回滾。此命令會提交此連線中的開啟事務。
語法
以下是truncate命令的通用語法。
TRUNCATE TABLE tableName
示例
在這個例子中,我們將使用以下查詢截斷名為**test**的表。
TRUNCATE TABLE test;
以上查詢產生以下輸出。
(6) row (s) effected
H2 資料庫 - 提交 (Commit)
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)
Grant 是來自 SQL 語法的命令,用於授予使用者或角色對錶的許可權。執行此命令需要管理員許可權。此命令會提交此連線中的開啟事務。
本章將討論 Grant 命令的不同場景。
授予許可權
Grant Right 命令用於向用戶或角色授予對錶的管理員許可權。
語法
以下是 Grant 命令的通用語法。
GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } [,...] ON { { SCHEMA schemaName } | { tableName [,...] } } TO { PUBLIC | userName | roleName }
示例
在這個例子中,我們將使用以下命令將 test 表授予只讀許可權。
GRANT SELECT ON TEST TO READONLY
以上命令產生以下輸出。
Grant successfully
Grant Alter Any Schema
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 命令的通用語法。
SAVEPOINT savepointName
示例
在這個例子中,我們將使用以下命令建立一個名為 Half_Done 的儲存點。
SAVEPOINT Half_Done;
以上命令產生以下輸出。
Savepoint created
H2 資料庫 - 回滾 (Rollback)
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 與此資料庫互動。本章將介紹如何使用 JDBC 連線 H2 資料庫以及 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 - 執行語句並接收 Resultset。
Stmt.executeUpdate("sql statement");
步驟 5 - 關閉連線。
conn.close();
在繼續建立完整程式之前,我們需要將h2-1.4.192.jar 檔案新增到 CLASSPATH。我們可以從C:\Program Files (x86)\H2\bin資料夾中獲取此jar檔案。
建立表
在這個例子中,我們將編寫一個建立表的程式。考慮一個名為Registration的表,它具有以下欄位。
序號 | 列名 | 資料型別 | 非空 | 主鍵 |
---|---|---|---|---|
1 | ID | 數字 | 是 | 是 |
2 | 名字 | Varchar(255) | 否 | 否 |
3 | 姓氏 | Varchar(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 | Zara | Ali | 18 |
101 | Mahnaz | Fatma | 25 |
102 | Zaid | Khan | 30 |
103 | Sumit | Mital | 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!