本記事では、HikariCP接続プール、OceanBase Connector/J、およびOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、削除、更新、クエリなどの基本的なデータベース操作を実装する方法について説明します。
前提条件
OceanBaseデータベースをインストールし、Oracleテナントを作成していること。
JDK 1.8とMavenをインストールしていること。
Eclipseをインストールしていること。
説明
このドキュメントでコードを実行するために使用されているツールはEclipse IDE for Java Developers 2022-03バージョンですが、個人の好みに応じて適したツールを選択してサンプルコードを実行することもできます。
手順
説明
ここで説明する手順は、Windows環境でEclipse IDE for Java Developers 2022-03を使用してこのプロジェクトをコンパイルおよび実行する場合のものです。他のOS環境やコンパイラを使用する場合は、手順が若干異なる可能性があります。
hikaricp-oceanbase-clientプロジェクトをEclipseにインポートします。- OceanBaseデータベースのURLを取得します。
hikaricp-oceanbase-clientプロジェクト内のデータベース接続情報を変更します。hikaricp-oceanbase-clientプロジェクトを実行します。
ステップ1:hikaricp-oceanbase-clientプロジェクトをEclipseにインポートする
Eclipseを開き、メニューバーからFile->Open Projects from File Systemを選択します。
ポップアップダイアログで、Directoryボタンをクリックしてプロジェクトのディレクトリを選択し、Finishをクリックしてインポートを完了します。
説明
Eclipseを使用してMavenプロジェクトをインポートすると、プロジェクト内の
pom.xmlファイルを自動的に検出し、その記述に基づいて必要な依存ライブラリをダウンロードしてプロジェクトに追加します。
プロジェクトの状況を確認します。

ステップ2:OceanBaseデータベースのURLを取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@oracel001 -p******接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
OceanBaseデータベースの接続文字列情報に基づいて、以下のURLの対応する情報を入力します。
jdbc:oceanbase://$host:$port/$schema_name?user=$user_name&password=$passwordパラメータ説明:
$host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$schema_name:アクセスするSchema名。注意
テナントに接続するユーザーには、
CREATE SESSION権限および該当SchemaのCREATE TABLE、INSERT、DELETE、UPDATE、SELECT権限が付与されていなければなりません。その他のユーザー権限の詳細については、Oracleモードの権限分類を参照してください。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
OceanBase Connector/JのURLパラメータの詳細については、データベースURLを参照してください。
例:
jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test_schema001?user=test_user001@oracel001&password=******
ステップ3:hikaricp-oceanbase-clientプロジェクトのデータベース接続情報を修正する
ステップ2:OceanBaseデータベースのURLを取得するで取得した情報に基づいて、hikaricp-oceanbase-client/src/main/resources/db.properties ファイル内のデータベース接続情報を修正します。

例:
- OBServerノードのIPアドレスは
xxx.xxx.xxx.xxxです。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
test_schema001です。 - テナントの接続アカウントは
test_user001@oracle001です。oracle001はOceanBaseデータベースで作成されたOracleモードのユーザーテナントであり、test_user001はテナントoracle001のユーザー名です。 - パスワードは
******です。
コード:
...
jdbcUrl=jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test_schema001
username=test_user001@oracle001
password=******
...
ステップ4:hikaricp-oceanbase-clientプロジェクトを実行する
プロジェクトナビゲータービューで、src/main/java ディレクトリを見つけて展開します。
Main.java ファイルを右クリックし、Run As -> Java Application を選択します。

Eclipseのコンソールウィンドウで、プロジェクトのログ情報と出力結果を確認します。

OceanBaseクライアント(OBClient)で以下のSQLステートメントを実行して結果を確認することもできます。
obclient [SYS]> SELECT * FROM test_schema001.test_hikaricp;戻り結果は次のとおりです:
+------+-------------+ | ID | NAME | +------+-------------+ | 1 | test_update | +------+-------------+ 1 row in set
プロジェクトコードについて
hikaricp-oceanbase-client をクリックしてプロジェクトコードをダウンロードします。これは、hikaricp-oceanbase-client.zip という名前の圧縮ファイルです。
解凍すると、hikaricp-oceanbase-client という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
hikaricp-oceanbase-client
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Main.java
│ └── resources
│ └── db.properties
└── pom.xml
ファイルの説明:
src:ソースコードのルートディレクトリです。main:アプリケーションの主要なロジックを含むメインコードディレクトリです。java:Javaソースコードディレクトリです。com:Javaパッケージディレクトリです。example:サンプルプロジェクトのパッケージディレクトリです。Main.java:テーブルの作成、データの挿入、削除、更新、クエリなどのロジック処理を含むメインクラスプログラムのサンプルファイルです。resources:設定ファイルなどを含むリソースファイルディレクトリです。db.properties:データベース接続に関するパラメータを含む接続プールの設定ファイルです。pom.xml:プロジェクトの依存関係とビルド設定を管理するために使用されるMavenプロジェクトの設定ファイルです。
pom.xmlコードの紹介
pom.xml ファイルはMavenプロジェクトの設定ファイルであり、プロジェクトの依存関係、プラグイン、ビルドルールなどの情報を定義しています。MavenはJavaプロジェクト管理ツールで、依存関係のダウンロード、プロジェクトのコンパイル、パッケージ化などの操作を自動化できます。
本記事の pom.xml ファイルのコードは、主に以下の部分で構成されています:
ファイル宣言ステートメント。
このファイルがXMLファイルであり、使用するXMLバージョンが
1.0、文字エンコーディング方式がUTF-8であることを宣言します。コード:
<?xml version="1.0" encoding="UTF-8"?>POMの名前空間とPOMモデルバージョンの設定。
xmlnsを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0と指定します。xmlns:xsiを使用して、XML名前空間をhttp://www.w3.org/2001/XMLSchema-instanceと指定します。xsi:schemaLocationを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0、POMのXSDファイルの場所をhttp://maven.apache.org/xsd/maven-4.0.0.xsdと指定します。<modelVersion>要素を使用して、このPOMファイルで使用するPOMモデルバージョンを4.0.0と指定します。
コード:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- その他の設定 --> </project>基本情報の設定。
<groupId>を使用して、プロジェクトが属する組織をcom.exampleと指定します。<artifactId>を使用して、プロジェクトの名前をhikaricp-oceanbase-clientと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。
コード:
<groupId>com.example</groupId> <artifactId>hikaricp-oceanbase-client</artifactId> <version>1.0-SNAPSHOT</version>プロジェクトソースファイルのプロパティ設定。
Mavenのコンパイラプラグインを
maven-compiler-pluginと指定し、ソースコードとターゲットJavaバージョンをどちらも8に設定しています。これは、プロジェクトのソースコードがJava 8の機能を使用して記述されており、コンパイル後のバイトコードもJava 8ランタイム環境と互換性があることを意味します。この設定により、プロジェクトはコンパイル時および実行時にJava 8の構文と機能を正しく処理できるようになります。説明
Java 1.8とJava 8は、同じバージョンの異なる命名方法です。
コード:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build>プロジェクトが依存するコンポーネントの設定。
データベースとのやり取りを行うために、
oceanbase-client依存ライブラリを追加します:<groupId>を使用して、依存関係が属する組織をcom.oceanbaseと指定します。<artifactId>を使用して、依存関係の名前をoceanbase-clientと指定します。<version>を使用して、依存関係のバージョン番号を2.4.2と指定します。
<main id="notice" type='explain'> <h4>説明</h4> <p>このセクションのコードは、プロジェクトが依存するコンポーネントがOceanBase Connector/JのV2.4.2バージョンであることを定義しています。他のバージョンの情報については、<a href="https://en.oceanbase.com/docs/oceanbase-connector-j-en">OceanBase JDBCドライバ</a>を参照してください。</p> </main> **コード:** ```java <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> ```高性能なJDBC接続プールを実現するために、
HikariCP依存ライブラリを追加します:<groupId>を使用して、依存関係が属する組織をcom.zaxxerと指定します。<artifactId>を使用して、依存関係の名前をHikariCPと指定します。<version>を使用して、依存関係のバージョン番号を3.3.1と指定します。
**コード:** ```java <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency> ```ログの記録と管理を容易に行うために、
logback-classic依存ライブラリを追加します:<groupId>を使用して、依存関係が属する組織をch.qos.logbackと指定します。<artifactId>を使用して、依存関係の名前をlogback-classicと指定します。<version>を使用して、依存関係のバージョン番号を1.2.5と指定します。
**コード:** ```java <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.5</version> </dependency> ```
db.propertiesコードの紹介
db.properties は本記事の例となる接続プールの設定ファイルであり、接続プールの設定プロパティが含まれています。これらのプロパティには、データベースURL、ユーザー名、パスワード、接続プールのその他のオプションが含まれます。
本記事の db.properties ファイルのコードは、主に以下の部分で構成されています:
データベース接続パラメータの設定
- データベース接続のURLを設定します。これには、ホストIPアドレス、ポート番号、アクセスするスキーマが含まれます。
- データベースのユーザー名を設定します。
- データベースのパスワードを設定します。
コード:
jdbcUrl=jdbc:oceanbase://$host:$port/$schema_name username=$user_name password=$passwordパラメータの説明:
$host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$schema_name:アクセスするスキーマ名です。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
その他の接続プールパラメータの設定
- プリコンパイル済みSQLステートメントのキャッシュを有効にします。
- プリコンパイル済みSQLステートメントのキャッシュサイズを250に設定します。
- 接続の最大ライフタイムを1800000ミリ秒(30分)に設定します。この時間を超えると接続は閉じられます。
- 接続のアイドルタイムアウトを600000ミリ秒(10分)に設定します。この時間を超えて接続がアイドル状態の場合、接続は閉じられます。
- 接続のタイムアウト時間を30000ミリ秒(30秒)に設定します。この時間内に接続が確立されない場合、例外がスローされます。
コード:
dataSource.cachePrepStmts=true dataSource.prepStmtCacheSize=250 dataSource.maxLifetime=1800000 dataSource.idleTimeout=600000 dataSource.connectionTimeout=30000
注意
具体的なプロパティ(パラメータ)の設定は、プロジェクトの要件とデータベースの特性によって異なります。実際の状況に応じて調整および設定を行うことを推奨します。HikariCP接続プールパラメータの詳細については、Configurationを参照してください。
HikariCP接続プールの一般的な基本パラメータ:
分類 |
パラメータ |
デフォルト値 |
説明 |
|---|---|---|---|
| 必須パラメータ | dataSourceClassName | N/A | JDBCドライバーが提供するDataSourceクラスの名前を指定するために使用されます。
注意
|
| jdbcUrl | N/A | JDBC接続データベースのURLを指定するために使用されます。 | |
| username | N/A | データベースへの接続時に使用するユーザー名を指定するために使用されます。 | |
| password | N/A | データベースへの接続時に使用するパスワードを指定します。 | |
| よく使われるオプションパラメータ | autoCommit | true | 接続プールから返される接続のデフォルトの自動コミット動作を制御するために使用されます。 |
| connectionTimeout | 30000 | クライアントが接続プールから接続を取得する際の最大待機時間を制御するために使用されます。単位はミリ秒で、デフォルト値は30000(30秒)です。許容される最小接続タイムアウト時間は250ミリ秒です。 | |
| idleTimeout | 600000 | プール内のアイドル状態の接続の最大時間を制御するために使用されます。単位はミリ秒で、デフォルト値は600000(10分)です。この設定には以下の制限があります:
|
|
| keepaliveTime | 0 | データベースまたはネットワークインフラストラクチャによって接続がタイムアウトされるのを防ぐために、接続キープアライブの頻度を制御するために使用されます。単位はミリ秒で、デフォルト値は0です。これは接続キープアライブを無効にすることを意味します。この値は maxLifetime プロパティの値より小さくする必要があります。 |
|
| maxLifetime | 1800000 | 接続プール内の接続の最大ライフタイムを制御するために使用されます。既に使用中の接続は自動的に回収されず、接続が閉じられた場合にのみ接続プールから削除されます。単位はミリ秒で、デフォルト値は1800000(30分)です。maxLifetime を0に設定すると、接続プール内の接続に最大ライフタイムの制限がなく、接続のライフタイムは無限であることを意味します。 |
|
| connectionTestQuery | N/A | 接続プールがデータベースに送信する接続テストクエリを実行するために使用されます。これは、接続プールから接続を取得する前に実行され、データベースへの接続がまだ有効かどうかを確認します。 | |
| minimumIdle | N/A | 接続プール内で維持される最小アイドル接続数を制御するために使用されます。アイドル接続数がこの値を下回り、かつ接続プール内の接続総数が maximumPoolSize より少ない場合、HikariCPは可能な限り迅速かつ効率的に追加の接続を追加しようとします。デフォルトでは、minimumIdle プロパティの値は maximumPoolSize プロパティと同じです。 |
|
| maximumPoolSize | 10 | アイドル状態と使用中の接続を含む、接続プールが許可する最大サイズを制御するために使用されます。この値により、データベースバックエンドへの実際の接続の最大数が決定されます。 | |
| poolName | N/A | ユーザー定義の接続プール名を表すために使用されます。ログ記録およびJMX管理コンソールでは、この名前は主に接続プールの識別と接続プールの設定に使用されます。デフォルトでは、自動的に名前が生成されます。 |
Main.javaコードの紹介
Main.java ファイルはサンプルプログラムの一部であり、HikariCP接続プールを使用してデータベース接続を取得し、テーブルの作成、データの挿入、削除、更新、クエリの実行、およびクエリ結果の出力など、一連のデータベース操作をデモンストレーションするために使用されます。
本記事の Main.java ファイルのコードは、主に以下の部分で構成されています:
必要なクラスとパッケージのインポート。
- このJavaファイルのパッケージ名を
com.exampleと定義します。これはJavaクラスの整理と管理に使用されます。 java.sql.Connectionクラスをインポートします。これはデータベースへの接続の確立と管理に使用されます。java.sql.PreparedStatementクラスをインポートします。これはプリコンパイルされたSQLステートメントの実行に使用されます。java.sql.ResultSetクラスをインポートします。これはクエリ結果セットの処理に使用されます。java.sql.SQLExceptionクラスをインポートします。これはSQL例外の処理に使用されます。- HikariCPの
HikariConfigクラスをインポートします。これはHikariCP接続プールの設定に使用されます。 - HikariCPの
HikariDataSourceクラスをインポートします。これはHikariCP接続プールの作成と管理に使用されます。
コード:
package com.example; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource;- このJavaファイルのパッケージ名を
クラス名とメソッドの定義。
Mainクラスを定義し、その中の
mainメソッドをプログラムのエントリポイントとします。mainメソッド内では、db.propertiesファイルを読み込んでHikariCP接続プールを設定し、データベース接続を取得します。その後、一連のメソッドを順次呼び出して、テーブルの作成、データの挿入、データのクエリ、データの更新、データの削除を行います。操作中にSQLException例外が発生した場合は、例外情報のスタックトレースを出力します。具体的な手順は以下のとおりです:- Mainという名前のpublicクラスを定義します。
- Mainクラスのエントリポイントメソッド
mainを定義します。 - HikariConfigオブジェクトを作成し、指定された
db.propertiesファイルを使用して設定します。 - HikariDataSourceオブジェクトを作成し、
try-with-resourcesブロック内でデータベース接続を取得します。 - テーブルを作成するためのメソッドを呼び出し、取得したデータベース接続オブジェクトを渡して、
test_hikaricpテーブルを作成します。 - データを挿入するためのメソッドを呼び出し、取得したデータベース接続オブジェクトとデータパラメータを渡して、
(1,'A1')と(2,'A2')の2行のデータを挿入します。 - データをクエリするためのメソッドを呼び出し、取得したデータベース接続オブジェクトを渡して、データの挿入状況を確認します。
- データを更新するためのメソッドを呼び出し、取得したデータベース接続オブジェクトと更新パラメータを渡して、
idが1の行のname列の値をtest_updateに更新します。 - データをクエリするためのメソッドを呼び出し、取得したデータベース接続オブジェクトを渡して、データの更新状況を確認します。
- データを削除するためのメソッドを呼び出し、取得したデータベース接続オブジェクトと削除パラメータを渡して、
idが2の行を削除します。 - データをクエリするためのメソッドを呼び出し、取得したデータベース接続オブジェクトを渡して、データの削除状況を確認します。
tryブロック内でSQLException例外が発生した場合、例外のスタックトレース情報を出力します。- テーブルの作成、データの挿入、データのクエリ、データの更新、データの削除を行うためのメソッドを定義します。
コード:
public class Main { public static void main(String[] args) { try { HikariConfig config = new HikariConfig("/db.properties"); try (HikariDataSource dataSource = new HikariDataSource(config); Connection conn = dataSource.getConnection()) { createTable(conn); insertData(conn, 1, "A1"); insertData(conn, 2, "A2"); selectData(conn); updateData(conn, "test_update", 1); selectData(conn); deleteData(conn, 2); selectData(conn); } } catch (SQLException e) { e.printStackTrace(); } } // テーブルを作成するためのメソッドを定義する // データを挿入するためのメソッドを定義する // データをクエリするためのメソッドを定義する // データを更新するためのメソッドを定義する // データを削除するためのメソッドを定義する }テーブルを作成するためのメソッドを定義する。
プライベート静的メソッド
createTableを定義します。このメソッドは、データベースにtest_hikaricpという名前のテーブルを作成するために使用されます。このテーブルにはid列とname列が含まれます。具体的な手順は以下のとおりです:- プライベート静的メソッド
createTableを定義します。このメソッドはConnectionオブジェクトをパラメータとして受け取り、SQLException例外をスローする可能性があることを宣言します。 - SQLステートメント文字列を定義します。これは、
test_hikaricpという名前のテーブルを作成するために使用されます。テーブルにはid列(データ型はNUMBER)とname列(データ型はVARCHAR2(50))が含まれます。 - 接続オブジェクト
connを使用して、プリコンパイルされたSQLステートメントオブジェクトpstmtを作成し、try-with-resourcesブロック内でこのオブジェクトを使用します。 - SQLステートメントを実行して、
test_hikaricpという名前のテーブルを作成します。 - コンソールにメッセージを出力して、テーブルの作成が成功したことを示します。
コード:
private static void createTable(Connection conn) throws SQLException { String sql = "CREATE TABLE test_hikaricp (id NUMBER, name VARCHAR2(50))"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.executeUpdate(); System.out.println("Table created successfully."); } }- プライベート静的メソッド
データを挿入するためのメソッドを定義する。
プライベート静的メソッド
insertDataを定義します。このメソッドは、データベースのtest_hikaricpテーブルにデータを挿入するために使用されます。具体的な手順は以下のとおりです:- プライベート静的メソッド
insertDataを定義します。このメソッドは、Connectionオブジェクト、整数型のidパラメータ、文字列型のnameパラメータを受け取り、SQLException例外をスローする可能性があることを宣言します。 - SQLステートメント文字列を定義します。これは、
test_hikaricpという名前のテーブルにデータを挿入するために使用されます。データにはid列とname列が含まれます。 - 接続オブジェクト
connを使用して、プリコンパイルされたSQLステートメントオブジェクトpstmtを作成し、try-with-resourcesブロック内でこのオブジェクトを使用します。 - SQLステートメントの最初のパラメータ
?の値をidに設定します。 - SQLステートメントの2番目のパラメータ
?の値をnameに設定します。 - SQLステートメントを実行して、テーブルにデータを挿入します。
- コンソールにメッセージを出力して、データの挿入が成功したことを示します。
コード:
private static void insertData(Connection conn, int id, String name) throws SQLException { String sql = "INSERT INTO test_hikaricp (id, name) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.setString(2, name); pstmt.executeUpdate(); System.out.println("Data inserted successfully."); } }- プライベート静的メソッド
データをクエリするためのメソッドを定義する。
プライベート静的メソッド
selectDataを定義します。このメソッドは、データベースからtest_hikaricpテーブルのデータをクエリするために使用されます。具体的な手順は以下のとおりです:- プライベート静的メソッド
selectDataを定義します。このメソッドは、Connectionオブジェクトをパラメータとして受け取り、SQLException例外をスローする可能性があることを宣言します。 - SQLステートメント文字列を定義します。これは、
test_hikaricpという名前のテーブルのすべてのデータをクエリするために使用されます。 - 接続オブジェクト
connを使用して、プリコンパイルされたSQLステートメントオブジェクトpstmtを作成し、try-with-resourcesブロック内でこのオブジェクトを使用します。同時に、executeQuery()メソッドを呼び出してSQLクエリを実行し、クエリ結果セットオブジェクトrsを返します。 - コンソールにメッセージを出力して、ユーザーデータの出力中であることを示します。
- クエリ結果セットを走査し、
next()メソッドを使用して結果セットに次の行のデータがあるかどうかを確認します。ある場合はループに入ります。 - 結果セットから
id列の値を取得し、変数idに代入します。 - 結果セットから
name列の値を取得し、変数nameに代入します。 - コンソールに各行のデータの
idとnameの値を出力します。 - コンソールに空行を出力します。
コード:
private static void selectData(Connection conn) throws SQLException { String sql = "SELECT * FROM test_hikaricp"; try (PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { System.out.println("User Data:"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } System.out.println(); } }- プライベート静的メソッド
データを更新するためのメソッドを定義する。
プライベート静的メソッド
updateDataを定義します。このメソッドは、データベースのtest_hikaricpテーブル内のデータを更新するために使用されます。具体的な手順は以下のとおりです:- プライベート静的メソッド
updateDataを定義します。このメソッドは、Connectionオブジェクト、文字列型のnameパラメータ、整数型のidパラメータを受け取り、SQLException例外をスローする可能性があることを宣言します。 - SQLステートメント文字列を定義します。これは、
test_hikaricpという名前のテーブル内のデータを更新するために使用されます。name列の値を指定されたnameに更新します。条件はid列の値が指定されたidと等しいことです。 - 接続オブジェクト
connを使用して、プリコンパイルされたSQLステートメントオブジェクトpstmtを作成し、try-with-resourcesブロック内でこのオブジェクトを使用します。 - SQLステートメントの最初のパラメータ
?の値をnameに設定します。 - SQLステートメントの2番目のパラメータ
?の値をidに設定します。 - SQLステートメントを実行して、テーブル内のデータを更新します。
- コンソールにメッセージを出力して、データの更新が成功したことを示します。
コード:
private static void updateData(Connection conn, String name, int id) throws SQLException { String sql = "UPDATE test_hikaricp SET name = ? WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, name); pstmt.setInt(2, id); pstmt.executeUpdate(); System.out.println("Data updated successfully."); } }- プライベート静的メソッド
データを削除するためのメソッドを定義する。
プライベート静的メソッド
deleteDataを定義します。このメソッドは、データベースからtest_hikaricpテーブルの条件を満たすデータを削除するために使用されます。具体的な手順は以下のとおりです:- プライベート静的メソッド
deleteDataを定義します。このメソッドは、Connectionオブジェクトと整数型のidパラメータを受け取り、SQLException例外をスローする可能性があることを宣言します。 - SQLステートメント文字列を定義します。これは、
test_hikaricpという名前のテーブルから条件id = ?を満たすデータを削除するために使用されます。 - 接続オブジェクト
connを使用して、プリコンパイルされたSQLステートメントオブジェクトpstmtを作成し、try-with-resourcesブロック内でこのオブジェクトを使用します。 - SQLステートメントの最初のパラメータ
?の値をidに設定します。 - SQLステートメントを実行して、条件を満たすデータをテーブルから削除します。
- コンソールにメッセージを出力して、データの削除が成功したことを示します。
コード:
private static void deleteData(Connection conn, int id) throws SQLException { String sql = "DELETE FROM test_hikaricp WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.executeUpdate(); System.out.println("Data deleted successfully."); } }- プライベート静的メソッド
全コード表示
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oceanbase</groupId>
<artifactId>hikaricp-oceanbase-client</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
</project>
jdbcUrl=jdbc:oceanbase://$host:$port/$schema_name
username=$user_name
password=$password
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.maxLifetime=1800000
dataSource.idleTimeout=600000
dataSource.connectionTimeout=30000
package com.example;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class Main {
public static void main(String[] args) {
try {
HikariConfig config = new HikariConfig("/db.properties");
try (HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection()) {
createTable(conn);
insertData(conn, 1, "A1");
insertData(conn, 2, "A2");
selectData(conn);
updateData(conn, "test_update", 1);
selectData(conn);
deleteData(conn, 2);
selectData(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void createTable(Connection conn) throws SQLException {
String sql = "CREATE TABLE test_hikaricp (id NUMBER, name VARCHAR2(50))";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.executeUpdate();
System.out.println("Table created successfully.");
}
}
private static void insertData(Connection conn, int id, String name) throws SQLException {
String sql = "INSERT INTO test_hikaricp (id, name) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.executeUpdate();
System.out.println("Data inserted successfully.");
}
}
private static void selectData(Connection conn) throws SQLException {
String sql = "SELECT * FROM test_hikaricp";
try (PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
System.out.println("User Data:");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
System.out.println();
}
}
private static void updateData(Connection conn, String name, int id) throws SQLException {
String sql = "UPDATE test_hikaricp SET name = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setInt(2, id);
pstmt.executeUpdate();
System.out.println("Data updated successfully.");
}
}
private static void deleteData(Connection conn, int id) throws SQLException {
String sql = "DELETE FROM test_hikaricp WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
System.out.println("Data deleted successfully.");
}
}
}
関連ドキュメント
- OceanBase Connector/Jの詳細については、OceanBase JDBCドライバを参照してください。
- HikariCP接続プールの詳細については、HikariCPを参照してください。
hikaricp-oceanbase-client サンプルプロジェクトをダウンロード