本ドキュメントでは、HikariCP コネクションプール、MySQL Connector/J、および OceanBase データベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、削除、更新、クエリなどの基本的なデータベース操作を実装する方法について説明します。
前提条件
-
OceanBase Cloud クラウドデータベースアカウントを登録し、クラスタインスタンスと OceanBase Cloud MySQLテナントを作成していること。詳細は、クラスタインスタンスの作成およびテナントの作成をご参照ください。
対象の MySQL互換モード テナントの接続文字列を取得していること。詳細な操作については、接続文字列の取得をご参照ください。
JDK 1.8 および Maven をインストールしていること。
Eclipse をインストールしていること。
説明
本ドキュメントでコードを実行するために使用するツールは Eclipse IDE for Java Developers 2022-03 バージョンですが、個人の好みに応じて適切なツールを選択してサンプルコードを実行することもできます。
操作手順
<main id="notice" type='explain'>
<h4>説明</h4>
<p>本ドキュメントに記載されている操作手順は、Windows 環境で Eclipse IDE for Java Developers 2022-03 を使用してプロジェクトをコンパイルおよび実行する手順です。他のオペレーティングシステム環境やコンパイラを使用している場合、操作手順が若干異なる場合があります。</p>
</main>
操作手順 1:hikaricp-mysql-client プロジェクトを Eclipse にインポートする
Eclipse を開き、メニューバーから File -> Open Projects from File System を選択します。
ポップアップダイアログで、Directory ボタンをクリックしてプロジェクトのディレクトリを選択し、Finish をクリックしてインポートを完了します。
説明
Eclipse を使用して Maven プロジェクトをインポートすると、Eclipse はプロジェクト内の
pom.xmlファイルを自動的に検出し、ファイルに記述された依存関係に基づいて必要な依存ライブラリを自動的にダウンロードしてプロジェクトに追加します。プロジェクトの状況を確認します。
操作手順 2:hikaricp-mysql-client プロジェクトのデータベース接続情報を変更する
前提条件で取得した接続文字列情報に基づいて、ファイル hikaricp-mysql-client/src/main/resources/db.properties 内のデータベース接続情報を変更します。
例は以下のとおりです。
- 接続アドレスは
t5******.********.oceanbase.cloudです。 - アクセスポートは 3306 を使用します。
- アクセスするデータベース名は
testです。 - テナントの接続アカウントは
test_user001です。 - パスワードは
******です。
コードは以下のとおりです。
...
jdbcUrl=jdbc:mysql://t5******.********.oceanbase.cloud:3306/test?useSSL=false
username=test_user001
password=******
...
操作手順 3:hikaricp-mysql-client プロジェクトを実行する
プロジェクトナビゲータービューで、src/main/java ディレクトリを見つけて展開します。
Main.java ファイルを右クリックし、Run As -> Java Application を選択します。
Eclipse のコンソールウィンドウで、プロジェクトのログ情報と出力結果を確認します。
OceanBase クライアント(OBClient)で以下の SQL 文を実行して結果を確認することもできます。
obclient [(none)]> SELECT * FROM test.test_hikaricp;返される結果は以下のとおりです。
+------+-------------+ | id | name | +------+-------------+ | 1 | test_update | +------+-------------+ 1 row in set
プロジェクトコードの紹介
hikaricp-mysql-client をクリックしてプロジェクトコードをダウンロードします。これは hikaricp-mysql-client.zip という名前の圧縮パッケージです。
解凍すると、hikaricp-mysql-client という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです。
hikaricp-mysql-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ファイルの場所を に、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-mysql-clientに指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTに指定します。
コードは以下のとおりです。
<groupId>com.example</groupId> <artifactId>hikaricp-mysql-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>プロジェクトが依存するコンポーネントを設定します。
データベースと対話するために、
mysql-connector-java依存ライブラリを追加します。<groupId>を使用して、依存関係が属する組織をmysqlに指定します。<artifactId>を使用して、依存関係の名前をmysql-connector-javaに指定します。<version>を使用して、依存関係のバージョン番号を5.1.40に指定します。
コードは以下のとおりです。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</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 ファイルのコードは、主に以下の部分で構成されています。
データベース接続パラメータを設定します。
- ホスト IP、ポート番号、アクセスするデータベースを含む、データベース接続の URL を設定します。
- データベースのユーザー名を設定します。
- データベースのパスワードを設定します。
コードは以下のとおりです。
jdbcUrl=jdbc:mysql://$host:$port/$database_name?useSSL=false username=$user_name password=$passwordパラメータの説明:
$host:接続文字列の-hパラメータから取得した、OceanBase Cloud クラウドデータベースの接続アドレス。$port:接続文字列の-Pパラメータから取得した、OceanBase Cloud クラウドデータベースの接続ポート。$database_name:接続文字列の-Dパラメータから取得した、アクセスするデータベース名。$user_name:接続文字列の-uパラメータから取得した、アカウント名。$password:接続文字列の-pパラメータから取得した、アカウントのパスワード。
その他のコネクションプールのパラメータを設定します。
- プリコンパイルされた 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 クラスの名前を指定するために使用されます。
注意HikariCP は適切なドライバを自動的に検出してロードできるため、通常 |
| 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クラスをインポートします。 - プリコンパイルされた SQL 文を実行するために、
java.sql.PreparedStatementクラスをインポートします。 - クエリ結果セットを処理するために、
java.sql.ResultSetクラスをインポートします。 - SQL 例外を処理するために、
java.sql.SQLExceptionクラスをインポートします。 - HikariCP コネクションプールを設定するために、HikariCP の
HikariConfigクラスをインポートします。 - HikariCP コネクションプールを作成および管理するために、HikariCP の
HikariDataSourceクラスをインポートします。
コードは以下のとおりです。
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 という名前のパブリッククラスを定義します。
- 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(); } } // テーブルを作成するメソッドを定義します // データを挿入するメソッドを定義します // データをクエリするメソッドを定義します // データを更新するメソッドを定義します // データを削除するメソッドを定義します }テーブルを作成するメソッドを定義します。
データベース内に
test_hikaricpという名前のテーブルを作成するためのプライベート静的メソッドcreateTableを定義します。このテーブルにはid列とname列が含まれます。具体的な手順は以下のとおりです。- Connection オブジェクトをパラメータとして受け取り、
SQLException例外をスローする可能性があることを宣言するプライベート静的メソッドcreateTableを定義します。 test_hikaricpという名前のテーブルを作成するための SQL 文の文字列を定義します。テーブルにはid列(データ型はINT)とname列(データ型はVARCHAR(50))が含まれます。- 接続オブジェクト
connを使用してプリコンパイルされた SQL 文オブジェクトpstmtを作成し、try-with-resourcesブロック内でそのオブジェクトを使用します。 - SQL 文を実行し、
test_hikaricpという名前のテーブルを作成します。 - コンソールにメッセージを出力し、テーブルが正常に作成されたことを示します。
コードは以下のとおりです。
private static void createTable(Connection conn) throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS test_hikaricp (id INT, name VARCHAR(50))"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.executeUpdate(); System.out.println("Table created successfully."); } }- Connection オブジェクトをパラメータとして受け取り、
データを挿入するメソッドを定義します。
データベース内のテーブル
test_hikaricpにデータを挿入するためのプライベート静的メソッドinsertDataを定義します。具体的な手順は以下のとおりです。- Connection オブジェクト、整数型の
idパラメータ、および文字列型のnameパラメータを受け取り、SQLException例外をスローする可能性があることを宣言するプライベート静的メソッドinsertDataを定義します。 test_hikaricpという名前のテーブルにデータを挿入するための SQL 文の文字列を定義します。データにはid列とname列が含まれます。- 接続オブジェクト
connを使用してプリコンパイルされた SQL 文オブジェクトpstmtを作成し、try-with-resourcesブロック内でそのオブジェクトを使用します。 - SQL 文の 1 番目のパラメータ
?の値を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."); } }- Connection オブジェクト、整数型の
データをクエリするメソッドを定義します。
データベースからテーブル
test_hikaricpのデータをクエリするためのプライベート静的メソッドselectDataを定義します。具体的な手順は以下のとおりです。- Connection オブジェクトをパラメータとして受け取り、
SQLException例外をスローする可能性があることを宣言するプライベート静的メソッドselectDataを定義します。 test_hikaricpという名前のテーブル内のすべてのデータをクエリするための SQL 文の文字列を定義します。- 接続オブジェクト
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(); } }- Connection オブジェクトをパラメータとして受け取り、
データを更新するメソッドを定義します。
データベース内のテーブル
test_hikaricpのデータを更新するためのプライベート静的メソッドupdateDataを定義します。具体的な手順は以下のとおりです。- Connection オブジェクト、文字列型の
nameパラメータ、および整数型のidパラメータを受け取り、SQLException例外をスローする可能性があることを宣言するプライベート静的メソッドupdateDataを定義します。 test_hikaricpという名前のテーブル内のデータを更新するための SQL 文の文字列を定義します。id列の値が指定されたidと等しいという条件で、name列の値を指定されたnameに更新します。- 接続オブジェクト
connを使用してプリコンパイルされた SQL 文オブジェクトpstmtを作成し、try-with-resourcesブロック内でそのオブジェクトを使用します。 - SQL 文の 1 番目のパラメータ
?の値を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."); } }- Connection オブジェクト、文字列型の
データを削除するメソッドを定義します。
データベースからテーブル
test_hikaricpの条件を満たすデータを削除するためのプライベート静的メソッドdeleteDataを定義します。具体的な手順は以下のとおりです。- Connection オブジェクトと整数型の
idパラメータを受け取り、SQLException例外をスローする可能性があることを宣言するプライベート静的メソッドdeleteDataを定義します。 test_hikaricpという名前のテーブルからid = ?の条件を満たすデータを削除するための SQL 文の文字列を定義します。- 接続オブジェクト
connを使用してプリコンパイルされた SQL 文オブジェクトpstmtを作成し、try-with-resourcesブロック内でそのオブジェクトを使用します。 - SQL 文の 1 番目のパラメータ
?の値を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."); } }- Connection オブジェクトと整数型の
完全なコードの表示
```java
<?xml version="1.0" encoding="UTF-8"?>
<groupId>com.oceanbase</groupId>
<artifactId>hikaricp-mysql-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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</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>
```java
jdbcUrl=jdbc:mysql://$host:$port/$database_name?useSSL=false
username=$user_name
password=$password
dataSource.cachePrepStmts=true dataSource.prepStmtCacheSize=250 dataSource.maxLifetime=1800000 dataSource.idleTimeout=600000 dataSource.connectionTimeout=30000 ```
```java
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 IF NOT EXISTS test_hikaricp (id INT, name VARCHAR(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.");
}
}
} ```
関連ドキュメント
- MySQL Connector/J の詳細については、MySQL Connector/Jの概要 をご参照ください。
- HikariCP コネクションプールの使用に関する詳細については、HikariCP をご参照ください。