H2-database-quick-guide

提供:Dev Guides
移動先:案内検索

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フェーズコミット複数接続、テーブルレベルロックを提供します。
  • H2はコストベースのオプティマイザーであり、複雑なクエリにゼロ管理の遺伝的アルゴリズムを使用しています。
  • H2には、スクロールおよび更新可能な結果セットのサポート、大規模な結果セット、外部結果の並べ替えが含まれ、関数は結果セットを返すことができます。
  • H2は、暗号化データベース(AES)、SHA-256パスワード暗号化、暗号化機能、およびSSLをサポートしています。

H2データベースのコンポーネント

H2データベースを使用するには、次のコンポーネントが必要です-

  • Webブラウザー
  • H2コンソールサーバー

これはクライアント/サーバーアプリケーションであるため、実行するにはサーバーとクライアント(ブラウザー)の両方が必要です。

H2データベース-インストール

H2はJavaで書かれたデータベースです。 JDBCを使用して、このデータベースをアプリケーションに簡単に埋め込むことができます。 これは、多くの異なるプラットフォームまたはJava Runtime Environmentの任意のバージョンで実行できます。 ただし、データベースをインストールする前に、システムに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がインストールされていない場合は、次のリンクにアクセスしてリンクします:/java/java_environment_setup [Install JDK]。

H2データベースのインストール

このデータベースはさまざまなプラットフォームで実行できます。 この章では、WindowsでのH2データベースのインストールについて学習します。

以下は、WindowsオペレーティングシステムにH2データベースをインストールする手順です。

手順1:H2セットアップファイルをダウンロードする

所定のリンクから最新バージョンのhttps://www.h2database.com/html/downloadl[H2 Database]をダウンロードします。 このリンクでは、2つのタイプのH2データベースの最新バージョンを入手できます。 1つはWindowsインストーラータイプ(.exeファイル)で、もう1つは他のオペレーティングシステム用のプラットフォームに依存しないzipファイルです。

ステップ2:H2データベースをインストールする

exeファイルをダウンロードした後、Windowsサポート可能なH2データベースをダウンロードするには、Windowsインストーラーをクリックします。 この場合、バージョン1.4.192のH2データベースを使用しています。.

ダウンロード後、H2 Windowsインストーラーファイル(つまり、 h2-setup-yyyy-mm-dd.exe)をダウンロードディレクトリに保存します。 H2データベースのインストールプロセスを開始するには、インストーラーファイルをダブルクリックします。

次の画面は、インストールプロセスの最初のステップです。 次のスクリーンショットに示すように、H2データベースサーバーをインストールするパスを指定します。

H2データベースのインストール

上記のスクリーンショットに見られるように、デフォルトでは C:\ ProgramFiles(x86)\ H2 を宛先フォルダーとして使用します。 [次へ]をクリックして、次の手順に進みます。 次の画面が表示されます。

接続先

上記のスクリーンショットで、[インストール]ボタンをクリックしてインストールプロセスを開始します。 インストール後、次のスクリーンショットを取得します。

インストールボタン

[完了]をクリックして、インストールプロセスを完了します。

手順3:H2データベースのインストールを確認する

インストール後、システムでのデータベースのインストールを確認しましょう。 Windowsをクリックし、「H2コンソール」と入力して、「H2コンソール」アイコンをクリックします。 URL http://localhost:8082 に接続します。 接続時に、H2データベースは次のスクリーンショットに示すようにデータベース登録を要求します。

データベースのインストール

上記のダイアログボックスに、保存された設定、設定名、ドライバークラス、JDBC URL、ユーザー名、パスワードなどのすべての詳細を入力します。 JDBC URLで、データベースの場所とデータベース名を指定します。 ユーザー名とパスワードは、データベースのユーザー名とパスワードのフィールドです。 接続をクリックします。

次のスクリーンショットに示すように、データベースのようこそページがポップアップします。

ポップアップ

H2データベース-選択

選択コマンドは、1つまたは複数のテーブルからレコードデータをフェッチするために使用されます。 選択クエリを設計する場合、 result sets という結果テーブルの形式でデータを返します。

構文

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 Name Age Address Salary
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 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コマンドの一般的なクエリ構文です。

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は、H2データベースサーバーに属するSQLコマンドです。 このコマンドは、単純な式を計算するために使用されます。 指定された式の結果を単一の列フィールドに返します。 結果の配列を返す場合、配列内の各要素は列の値として表示されます。

構文

CALLコマンドの一般的な構文は次のとおりです。

CALL expression;

この構文では算術式を使用できます。

例を挙げて、callコマンドを使用して算術式(15* 25)を実行します。

CALL 15*25;

上記のコマンドは、次の出力を生成します。

375
375

H2データベース-説明

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 INTO tableName [ ( columnName [,...] ) ]
[ KEY ( columnName [,...] ) ]
{ VALUES { ( { DEFAULT | expression } [,...] ) } [,...] | select }

上記の構文では、KEY句を使用して主キー列名を指定します。 VALUES句とともに、プリミティブ値を使用して挿入したり、selectコマンドを使用してこのテーブルに別のテーブル値を取得して保存したりできます。

この例では、Customersテーブルに新しいレコードを追加してみましょう。 以下は、表の新しいレコードの詳細です。

Column Name Value
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 Name Age Address Salary
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 コマンドを使用してレコードを更新してみましょう。 以下は、更新されるレコードの詳細です。

Column Name Value
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 Name Age Address Salary
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 { SCHEMAS | TABLES [ FROM schemaName ] |
COLUMNS FROM tableName [ FROM schemaName ] }

次のコマンドを使用して、現在のデータベース内のテーブルのリストを取得できます。

SHOW TABLES;

上記のコマンドは、次の出力を生成します。

TABLE_NAME TABLE_SCHEMA
CUSTOMER PUBLIC
EMP PUBLIC

H2データベース-作成

CREATEは、H2データベースサーバーでテーブル、スキーマ、シーケンス、ビュー、およびユーザーを作成するために使用される汎用SQLコマンドです。

テーブルを作成

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 -データベースを閉じたり開いたりするときに一時テーブルが削除されます。 基本的に、一時テーブルは2種類あります-
  • GLOBALタイプ-すべての接続でアクセス可能。
  • LOCALタイプ-現在の接続からアクセス可能。 +一時テーブルのデフォルトタイプはグローバルタイプです。 一時テーブルのインデックスは、CREATE CACHED TABLEを使用して一時テーブルが作成されない限り、メインメモリに保持されます。
  • ENGINE -ENGINEオプションは、カスタムテーブル実装が使用される場合にのみ必要です。
  • NOT PERSISTENT -完全なテーブルデータをメモリ内に保持する修飾子であり、データベースを閉じるとすべての行が失われます。
  • TRANSACTIONAL -オープントランザクションをコミットするキーワードであり、このコマンドは一時テーブルのみをサポートします。

この例では、次のデータを使用して、tutorials_tblという名前のテーブルを作成します。

Sr.No Column Name Data Type
1 ID Int
2 Title Varchar(50)
3 Author Varchar(20)
4 Submission_date Date

次のクエリは、指定された列データとともにテーブル 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 [ 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 Addコマンドの一般的な構文は次のとおりです。

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

この例では、新しい列 start_date をテーブル tutorials_tbl に追加します。 start_dateのデータ型は日付です。 以下は、新しい列を追加するクエリです。

ALTER TABLE tutorials_tbl ADD start_date DATE;

上記のクエリは、次の出力を生成します。

(6) rows effected

テーブルの変更制約の追加

テーブル追加制約の変更は、主キー、外部キー、非ヌルなどのさまざまな制約をテーブルに追加するために使用されるコマンドです。

必要なインデックスは、まだ存在しない場合は自動的に作成されます。 一意制約のチェックを無効にすることはできません。 このコマンドは、この接続で開いているトランザクションをコミットします。

構文

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 [ 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

表の変更列の変更

このコマンドは、特定のテーブルの列の構造とプロパティを変更するために使用されます。 プロパティの変更とは、列のデータ型の変更、列の名前の変更、ID値の変更、または選択性の変更を意味します。

構文

以下は、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 [ IF EXISTS ] tableName [,...] [ RESTRICT | CASCADE ]

RESTRICTを使用しており、依存ビューを持つテーブルが存在する場合、コマンドは失敗します。 CASCADEキーワードを使用している場合、すべての依存ビューは削除されます。

この例では、次のクエリを使用してtestという名前のテーブルを削除します。

DROP TABLE test;

上記のクエリは、次の出力を生成します。

(6) row (s) effected

スキーマの削除

スキーマの削除は、データベースサーバーからそれぞれのスキーマを削除するコマンドです。 現在のスキーマでは機能しません。

構文

DROP SCHEMA [ IF EXISTS ] schemaName

この例では、次のクエリを使用して test_schema という名前のスキーマを削除します。

DROP SCHEMA TEST_SCHEMA;

上記のクエリは、次の出力を生成します。

(0) row(s) effected

ドロップシーケンス

ドロップシーケンスは、テーブル構造からシーケンスをドロップするために使用されるコマンドです。

構文

以下はDrop Sequenceコマンドの一般的な構文です。

DROP SEQUENCE [ IF EXISTS ] sequenceName

このコマンドは、この接続で開いているトランザクションをコミットします。

この例では、 sequence_id という名前のシーケンスを削除します。 以下はコマンドです。

DROP SEQUENCE sequence_id;

上記のコマンドは、次の出力を生成します。

(0) row (s) effected

ドロップビュー

ドロップビューは、既存のビューをドロップするために使用されるコマンドです。 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コマンドには2つの異なる構文があります。

以下は、現在のトランザクションをコミットする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 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コマンドには2つの異なる構文があります。

以下は、rollbackコマンドの一般的な構文です。

ROLLBACK [ TO SAVEPOINT savepointName ]

以下は、特定のトランザクションに対するRollbackコマンドの一般的な構文です。

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接続を作成するには5つの手順があります。

  • ステップ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に追加する必要があります。 この jar は、フォルダー C:\ Program Files(x86)\ H2 \ bin から取得できます。

テーブルを作成

この例では、テーブルを作成するためのプログラムを作成します。 次のフィールドを持つ Registration という名前のテーブルを考えてください。

S.No Column Name Data Type NOT NULL Primary Key
1 ID Number Yes Yes
2 First Varchar(255) No No
3 Last Varchar(255) No No
4 Age Number No No

以下は、 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 First Last Age
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!