本記事では、HikariCP接続プール、OceanBase Connector/J、およびOceanBaseデータベースを用いてアプリケーションを構築し、テーブル作成・データの挿入・更新・削除・クエリなどの基本的なデータベース操作を実装する方法を紹介します。
前提条件
OceanBaseデータベースがインストール済みで、Oracleモードのテナントが作成されていること。
JDK 1.8とMavenがインストール済みであること。
Eclipseがインストール済みであること。
説明
この記事でコードの実行にはEclipse IDE for Java Developers 2022-03バージョンを使用しています。ご自身の好みに合わせて、適切なツールを選択してサンプルコードを実行することも可能です。
操作手順
説明
本記事の操作手順はWindows環境に基づいています。他の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:アクセスするスキーマ名です。注意
接続テナントのユーザーに、
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と指定します。
説明
この部分のコードでは、プロジェクトが依存するコンポーネントとしてOceanBase Connector/JのバージョンV2.4.2を定義しています。他のバージョンの情報については、OceanBase JDBCドライバーを参照してください
コード:
<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と指定します。
コード:
<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と指定します。
コード:
<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アドレス、ポート番号、アクセスするSchemaが含まれます。
- データベースのユーザー名を設定します。
- データベースのパスワードを設定します。
コード:
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サンプルプロジェクトをダウンロード