本トピックでは、C3P0 コネクションプール、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:c3p0-mysql-jdbc プロジェクトを Eclipse にインポートする
Eclipse を開き、メニューバーから File -> Open Projects from File System を選択します。
ポップアップダイアログで、Directory ボタンをクリックしてプロジェクトのディレクトリを選択し、Finish をクリックしてインポートを完了します。
説明
Eclipse を使用して Maven プロジェクトをインポートすると、Eclipse はプロジェクト内の
pom.xmlファイルを自動的に検出し、ファイルに記述された依存関係に基づいて必要な依存ライブラリを自動的にダウンロードしてプロジェクトに追加します。プロジェクトの状況を確認します。
操作手順 2:c3p0-mysql-jdbc プロジェクトのデータベース接続情報を変更する
前提条件で取得した接続文字列情報に基づいて、ファイル c3p0-mysql-jdbc/src/main/resources/c3p0-config.xml 内のデータベース接続情報を変更します。
例は次のとおりです:
- 接続アドレスは
t5******.********.oceanbase.cloudです。 - アクセスポートは 3306 を使用します。
- アクセスするデータベース名は
testです。 - テナントの接続アカウントは
test_user001です。 - パスワードは
******です。
コードは次のとおりです。
...
<property name="jdbcUrl">jdbc:mysql://t5******.********.oceanbase.cloud:3306/test</property>
<property name="user">test_user001</property>
<property name="password">******</property>
...
操作手順 3:c3p0-mysql-jdbc プロジェクトを実行する
プロジェクトナビゲータービューで、src/main/java ディレクトリを見つけて展開します。
Main.java ファイルを右クリックし、Run As -> Java Application を選択します。
Eclipse のコンソールウィンドウで、プロジェクトのログ情報と出力結果を確認します。
OceanBase クライアント(OBClient)で次の SQL 文を実行して結果を確認することもできます。
obclient [test]> SELECT * FROM test_c3p0;返される結果は次のとおりです。
+------+--------------+ | id | name | +------+--------------+ | 5 | test_update | | 6 | test_insert6 | | 7 | test_insert7 | | 8 | test_insert8 | | 9 | test_insert9 | +------+--------------+ 5 rows in set
プロジェクトコードの紹介
c3p0-mysql-jdbc をクリックしてプロジェクトコードをダウンロードします。これは c3p0-mysql-jdbc.zip という名前の圧縮パッケージです。
解凍すると、c3p0-mysql-jdbc という名前のフォルダが作成されます。ディレクトリ構造は次のとおりです。
c3p0-mysql-jdbc
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Main.java
│ └── resources
│ └── c3p0-config.xml
└── pom.xml
ファイルの説明:
src:ソースコードのルートディレクトリ。main:メインコードディレクトリ。アプリケーションの主要なロジックが含まれます。java:Java ソースコードディレクトリ。com:Java パッケージディレクトリ。example:サンプルプロジェクトのパッケージディレクトリ。Main.java:メインクラス。テーブルの作成やデータの挿入などのロジックが含まれます。resources:リソースファイルディレクトリ。設定ファイルなどが含まれます。c3p0-config.xml:C3P0 コネクションプールの設定ファイル。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>を使用して、プロジェクト名をtestc3p0に指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTに指定します。
コードは次のとおりです。
<groupId>com.example</groupId> <artifactId>testc3p0</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/J のバージョン 8.0.25 であることを定義しています。他のバージョンの情報については、MySQL Connector/J をご参照ください。
<dependency>を使用して依存関係を定義します。mysql-connector-java依存ライブラリを追加します。
<groupId>を使用して、依存関係が属する組織をmysqlに指定します。<artifactId>を使用して、依存関係の名前をmysql-connector-javaに指定します。<version>を使用して、依存関係のバージョン番号を8.0.25に指定します。
c3p0依存ライブラリを追加します。
<groupId>を使用して、依存関係が属する組織をcom.mchangeに指定します。<artifactId>を使用して、依存関係の名前をc3p0に指定します。<version>を使用して、依存関係のバージョン番号を0.9.5.5に指定します。
コードは次のとおりです:
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> </dependencies>
c3p0-config.xml コードの紹介
c3p0-config.xml ファイルは C3P0 コネクションプールの設定ファイルであり、データベース接続に関連するプロパティを設定するために使用されます。各 <property> 要素の値を設定することで、データベースドライバ、接続 URL、ユーザー名、パスワード、コネクションプールサイズなどのプロパティを設定できます。
本ドキュメントの c3p0-config.xml ファイルのコードは、主に以下の部分で構成されています。
ファイル宣言文。
このファイルが XML ファイルであり、使用する XML バージョンが
1.0、文字エンコーディングがUTF-8であることを宣言します。コードは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>基本情報を設定します。
<c3p0-config>を使用して、c3p0 コネクションプールの設定情報を加えます。<named-config name="oceanbase">を使用して、oceanbaseという名前の構成を定義します。コード内でこの名前を使用して該当する構成を参照し、oceanbaseデータベースに関連する接続情報とコネクションプールのプロパティを取得できます。
コードは次のとおりです。
<c3p0-config> <named-config name="oceanbase"> // 各<property>要素の値を設定 </named-config> </c3p0-config>データベースドライバを設定します。
<property>を使用して、OceanBase データベースへの接続時に使用する MySQL JDBC ドライバのクラス名をcom.mysql.cj.jdbc.Driverに指定します。説明
MySQL Connector/J 実装クラスの名前情報については、Driver/Datasource Class Name をご参照ください。
コードは次のとおりです。
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>データベース接続情報を設定します。
- ホスト IP、ポート番号、アクセスするデータベース、URL パラメータなどの情報を含む、データベース接続の URL を設定します。
- データベースのユーザー名を設定します。
- データベースのパスワードを設定します。
コードは次のとおりです。
<property name="jdbcUrl">jdbc:mysql://$host:$port/$database_name</property>
<property name="user">$user_name</property>
<property name="password">$password</property>
**パラメータの説明:**
* `$host`:接続文字列の `-h` パラメータから取得した、OceanBase Cloud データベースの接続アドレス。
* `$port`:接続文字列の `-P` パラメータから取得した、OceanBase Cloud データベースの接続ポート。
* `$database_name`:接続文字列の `-D` パラメータから取得した、アクセスするデータベース名。
* `$user_name`:接続文字列の `-u` パラメータから取得した、アカウント名。
* `$password`:接続文字列の `-p` パラメータから取得した、アカウントのパスワード。
その他の c3p0 データベースコネクションプールのパラメータを設定します。
- コネクションプールが必要な場合に一度に増やす接続数を 20 に設定します。つまり、コネクションプール内の接続が不足した場合、毎回 20 個の接続を追加します。
- コネクションプールの初期サイズを 10 に設定します。つまり、コネクションプールは起動時に 10 個の接続を事前に作成します。
- コネクションプールの最小接続数を 5 に設定します。つまり、コネクションプール内で保持される最小接続数は 5 を下回りません。
- コネクションプールの最大接続数を 30 に設定します。つまり、コネクションプール内で許可される最大接続数は 30 を超えません。
- 各接続の最大キャッシュ文数を 0 に設定します。つまり、文をキャッシュしません。
- コネクションプール内の各接続の最大キャッシュ文数を 0 に設定します。つまり、各接続は文をキャッシュしません。
- c3p0 が使用する補助スレッド数を 3 に設定します。これらの補助スレッドは、低速な JDBC 操作を実行するために使用されます。
- c3p0 接続のプロパティチェックサイクルを 3 秒に設定します。つまり、3 秒ごとに接続のプロパティをチェックします。
- 接続取得のタイムアウト時間を 1000 ミリ秒に設定します。つまり、1000 ミリ秒以内に接続を取得できない場合、タイムアウト例外がスローされます。
- コネクションプール内のアイドル接続のチェックサイクルを 3 秒に設定します。つまり、3 秒ごとにアイドル接続の状態をチェックします。
- コネクションプール内の接続の最大アイドル時間を 10 秒に設定します。つまり、接続が 10 秒間使用されない場合、その接続は閉じられます。
- コネクションプール内で最大接続数を超えた接続の最大アイドル時間を 5 秒に設定します。つまり、接続が最大接続数を超え、かつ 5 秒以上アイドル状態にある場合、その接続は閉じられます。
- 接続取得試行時の再試行遅延時間を 1000 ミリ秒に設定します。つまり、接続の取得に失敗した場合、1000 ミリ秒後に再試行します。
- c3p0 の自動テストテーブルを
Testに設定します。これは、接続が有効かどうかをテストするために使用される特別なテーブルです。 - コネクションプールに接続を返却する際に接続の有効性をテストするかどうかを設定します。true に設定すると、接続がコネクションプールに返却される際に接続の有効性テストが行われます。
コードは次のとおりです。
<property name="acquireIncrement">20</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">30</property> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">0</property> <property name="numHelperThreads">3</property> <property name="propertyCycle">3</property> <property name="checkoutTimeout">1000</property> <property name="idleConnectionTestPeriod">3</property> <property name="maxIdleTime">10</property> <property name="maxIdleTimeExcessConnections">5</property> <property name="acquireRetryDelay">1000</property> <property name="automaticTestTable">Test</property> <property name="testConnectionOnCheckin">true</property>
注意
具体的なプロパティ(パラメータ)の設定は、プロジェクトの要件とデータベースの特性に依存するため、実際の状況に応じて調整および設定することをお勧めします。C3P0 コネクションプールの設定パラメータの詳細については、C3P0 をご参照ください。
C3P0 コネクションプールの一般的なパラメータ:
分類 |
プロパティ |
デフォルト値 |
説明 |
|---|---|---|---|
| 必須項目 | driverClass | N/A | ドライバクラス名 |
| jdbcUrl | N/A | データベースの接続 URL を指定するために使用されます。 | |
| user | N/A | データベース接続時に使用するユーザー名を指定するために使用されます。 | |
| password | N/A | データベース接続時に使用するパスワードを指定するために使用されます。 | |
| 基本設定 | acquireIncrement | 3 | コネクションプールで必要な場合に一度に取得する接続数を設定するために使用されます。たとえば、acquireIncrement の値が 20 で、コネクションプールに現在 5 つのアイドル接続しかない場合、接続を取得する際に、コネクションプールはアプリケーションの要件を満たすために一度に 20 個の新しい接続を作成します。 |
| acquireRetryAttempts | 30 | データベースからの新しい接続の取得に失敗した後の再試行回数を設定するために使用されます。この値がゼロ以下の場合、C3P0 は接続の取得を無限に試行し続けます。 | |
| maxIdleTime | 0 | コネクションプール内の接続の最大アイドル時間を設定するために使用されます。0 はアイドル接続が期限切れにならないことを示します。たとえば、maxIdleTime を 10 秒に設定した場合、コネクションプール内の接続はアイドル時間が 10 秒を超えて使用されないと、コネクションプールによって閉じられ、削除されます。次回アプリケーションが再び接続を要求したときに、コネクションプールは新しい接続を再作成します。 |
|
| maxPoolSize | 15 | コネクションプール内の最大接続数を設定するために使用されます。コネクションプール内の接続数が maxPoolSize で指定された値に達すると、接続がコネクションプールに解放されるまで、新しい接続要求はブロックされます。 |
|
| MinPoolSize | 3 | コネクションプール内の最小接続数を設定するために使用されます。接続が使用されていない場合でも、コネクションプールは少なくとも minPoolSize で指定された数の接続を保持します。 |
|
| initialPoolSize | 3 | コネクションプールが起動時に事前に作成する接続数を設定するために使用されます。値は minPoolSiz と maxPoolSize の間である必要があります。つまり、コネクションプールの初期化時に、initialPoolSize で指定された数の接続が作成されます。 |
|
| オプションのパラメータ | acquireRetryDelay | 1000 | 接続取得時の再試行遅延時間をミリ秒単位で設定するために使用されます。アプリケーションがコネクションプールから接続を取得する際、コネクションプールに利用可能な接続がない場合、接続の取得に失敗することがあります。このとき、コネクションプールは acquireRetryDelay の設定に基づいて再試行します。 |
| autoCommitOnClose | false | 接続が閉じられたときにトランザクションを自動的にコミットするかどうかを設定するために使用されます。デフォルト値は false であり、接続が閉じられたときにトランザクションは自動的にコミットされません。アプリケーションが接続を閉じる前に明示的にトランザクションをコミットする必要がある場合は、autoCommitOnClose を true に設定できます。
注意トランザクションの自動コミットは、データの不整合や損失を引き起こす可能性があります。したがって、トランザクションの整合性が確保されている状況で |
|
| automaticTestTable | null | コネクションプールの自動テストテーブルを設定するために使用されます。C3P0 は指定された名前の空のテーブルを作成し、そのテーブルに対するクエリを使用して Connection をテストします。デフォルト値は null であり、テスト文を実行しないことを示します。たとえば、automaticTestTable を Test に設定した場合、C3P0 は Test という名前の空のテーブルを作成し、組み込みのクエリ文を使用してテストを行います。
説明コネクションプールで |
|
| idleConnectionTestPeriod | 0 | コネクションプールがアイドル接続の検出を実行する時間間隔をミリ秒単位で設定するために使用されます。つまり、コネクションプールは一定の時間間隔でアイドル接続をテストします。デフォルト値は 0 であり、アイドル接続の検出を行わないことを示します。 | |
| maxStatements | 0 | コネクションプールの最大プリペアドステートメント数を設定するために使用されます。
説明
|
|
| maxStatementsPerConnection | 0 | 各接続で許可される最大プリペアドステートメント数を設定するために使用されます。
説明
|
|
| numHelperThreads | 3 | 非同期処理タスクに使用される補助スレッドの数を指定するために使用されます。
説明
|
|
| preferredTestQuery | null | すべての接続テストで実行されるテスト文を定義します。接続テストを使用する場合、テスト速度を大幅に向上させることができます。
注意テスト対象のテーブルは、データソースの初期化時に存在している必要があります。 |
|
| checkoutTimeout | 0 | コネクションプールから接続を取得する際のタイムアウト時間をミリ秒単位で指定するために使用されます。デフォルト値は 0 であり、タイムアウト制限がないことを示します。コネクションプールが使い果たされたときに、クライアントが getConnection() を呼び出してから新しい接続を取得するまでの待機時間であり、タイムアウトすると SQLException がスローされます。 |
|
| 非推奨のパラメータ | breakAfterAcquireFailure | false | 接続の取得に失敗したときにコネクションプールの取得操作を中断するかどうかを制御するために使用されます。接続の取得に失敗すると、コネクションプールからの接続取得を待機しているすべてのスレッドで例外がスローされます。ただし、データソースは引き続き有効に保持され、次回 getConnection() が呼び出されたときに接続の取得を再試行します。
|
| testConnectionOnCheckout | false | コネクションプールから接続を取得する際に接続をテストするかどうかを指定するために使用されます。
説明接続テストを実行することで接続が有効であることを確認できますが、一定のオーバーヘッドも増加します。したがって、具体的なアプリケーションの要件とパフォーマンス要件に基づいて、接続テストを有効にするかどうかを決定する必要があります。アプリケーションが接続の可用性に対して高い要件を持つ場合は、接続テストを有効にします。ただし、コネクションプール内の接続が頻繁に取得および解放される場合、接続テストが頻繁になりすぎてパフォーマンスに影響を与える可能性があります。 |
|
| testConnectionOnCheckin | false | コネクションプールに接続を返却する際に接続をテストするかどうかを指定するために使用されます。
説明接続テストを実行することで接続が有効であることを確認できますが、一定のオーバーヘッドも増加します。したがって、具体的なアプリケーションの要件とパフォーマンス要件に基づいて、接続テストを有効にするかどうかを決定する必要があります。アプリケーションが接続の可用性に対して高い要件を持つ場合は、接続テストを有効にします。ただし、コネクションプール内の接続が頻繁に取得および返却される場合、接続テストが頻繁になりすぎてパフォーマンスに影響を与える可能性があります。 |
Main.java コードの紹介
Main.java ファイルはサンプルプログラムの一部であり、c3p0 コネクションプールを介してデータベース接続を取得し、トランザクション内でテーブルの作成、データの挿入、データの削除、データの更新、データのクエリなどの一連のデータベース操作を実行し、クエリ結果を出力する方法を示します。これは、c3p0 コネクションプールを使用してデータベース接続を管理し、トランザクション操作を実行して、データベース操作の効率とパフォーマンスを向上させる方法を示しています。
本トピックの Main.java ファイルのコードは、主に以下の部分で構成されています。
パッケージを定義し、
java.sqlのインターフェースをインポートします。- 現在のコードが属するパッケージ名を
com.exampleとして宣言します。 - データベース接続を表すために使用される
java.sql.Connectionクラスをインポートします。 - プリコンパイルされたデータベース操作を実行するために使用される
java.sql.PreparedStatementクラスをインポートします。 - データベースクエリ結果セットを表すために使用される
java.sql.ResultSetクラスをインポートします。 - c3p0 コネクションプールを使用するために
com.mchange.v2.c3p0.ComboPooledDataSourceクラスをインポートします。
コードは次のとおりです。
package com.example; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.mchange.v2.c3p0.ComboPooledDataSource;- 現在のコードが属するパッケージ名を
クラス名とメソッドを定義します。
- プログラムのエントリポイントとして、
Mainという名前のパブリッククラスを定義します。クラス名はファイル名と一致している必要があります。 - プログラムの開始実行ポイントとして、パブリック静的メソッド
mainを定義します。 try-with-resources文を使用して、データベース接続を取得し、プリコンパイルされた SQL 文を作成します。- データベーストランザクション操作。
- 発生する可能性のある例外をキャッチし、例外スタック情報を出力します。
- c3p0 コネクションプールからデータベース接続を取得するためのプライベート静的メソッド
getConnectionを定義します。メソッド内で、まずComboPooledDataSourceオブジェクトcpdsを作成します。このオブジェクトは、パラメータoceanbaseを介してコネクションプールの設定を指定します。次に、cpds.getConnection()メソッドを使用してコネクションプールからデータベース接続を取得し、それを返します。
コードは次のとおりです。
public class Main { public static void main(String[] args) { try ( //データベース接続を取得します // プリコンパイルされた SQL 文を作成します ) { // データベーストランザクション操作:トランザクションの開始、テーブルの作成、データの挿入、データの削除、データの更新、データのクエリ、およびトランザクションのコミット } catch (Exception e) { e.printStackTrace(); } } private static Connection getConnection() throws Exception { ComboPooledDataSource cpds = new ComboPooledDataSource("oceanbase"); return cpds.getConnection(); } }- プログラムのエントリポイントとして、
データベース接続を取得します。
データベース接続を取得し、それを
conn変数に代入します。コードは次のとおりです。
Connection conn = getConnection();プリコンパイルされた SQL 文を作成します。
test_c3p0という名前のデータベーステーブルを作成するためのプリコンパイルされた SQL 文を作成します。test_c3p0テーブルにデータを挿入するためのプリコンパイルされた SQL 文を作成します。test_c3p0テーブルからデータを削除するためのプリコンパイルされた SQL 文を作成します。test_c3p0テーブル内のデータを更新するためのプリコンパイルされた SQL 文を作成します。test_c3p0テーブルからデータをクエリするためのプリコンパイルされた SQL 文を作成します。
コードは次のとおりです。
PreparedStatement stmtCreate = conn.prepareStatement("CREATE TABLE test_c3p0 (id INT, name VARCHAR(32))"); PreparedStatement stmtInsert = conn.prepareStatement("INSERT INTO test_c3p0 VALUES (?, ?)"); PreparedStatement stmtDelete = conn.prepareStatement("DELETE FROM test_c3p0 WHERE id < ?"); PreparedStatement stmtUpdate = conn.prepareStatement("UPDATE test_c3p0 SET name = ? WHERE id = ?"); PreparedStatement stmtSelect = conn.prepareStatement("SELECT * FROM test_c3p0")トランザクションを開始します。
データベース接続の自動コミットを
falseに設定し、トランザクションメカニズムを有効にします。コードは次のとおりです。
conn.setAutoCommit(false);テーブルを作成します。
テーブル作成の SQL 文を実行します。
コードは次のとおりです。
stmtCreate.execute();データを挿入します。
forループを使用してtest_c3p0テーブルに 10 件のデータを挿入します。最初の列の値は変数iの値であり、2 番目の列の値は文字列test_insertの後に変数iの値を追加したものです。コードは次のとおりです。
for (int i = 0; i < 10; i++) { stmtInsert.setInt(1, i); stmtInsert.setString(2, "test_insert" + i); stmtInsert.executeUpdate(); }データを削除します。
削除文のパラメータを 5 に設定し、削除操作を実行します。
コードは次のとおりです。
stmtDelete.setInt(1, 5); stmtDelete.executeUpdate();データを更新します。
更新文の最初のパラメータを
test_updateに、2 番目のパラメータを 5 に設定し、更新操作を実行します。コードは次のとおりです。
stmtUpdate.setString(1, "test_update"); stmtUpdate.setInt(2, 5); stmtUpdate.executeUpdate();データをクエリします。
- クエリ文を実行し、クエリ結果を
ResultSetオブジェクトrsに保存します。 - while ループを使用し、rs.next() を介して結果セットに次の行のデータがあるかどうかを判断します。ある場合は、ループ内のコードを実行します。
- ループ内のコードは、各行のデータの
id列とname列の値を出力します。 - 結果セットを閉じ、関連するリソースを解放します。
コードは次のとおりです。
ResultSet rs = stmtSelect.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id") + " " + rs.getString("name")); } rs.close();- クエリ文を実行し、クエリ結果を
トランザクションをコミットします。
コードは次のとおりです。
conn.commit();
完全なコードの表示
```java
<?xml version="1.0" encoding="UTF-8"?>
<groupId>com.oceanbase</groupId>
<artifactId>testc3p0</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>8.0.25</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
</dependencies>
```java
<?xml version="1.0" encoding="UTF-8"?>
```java
package com.example;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Main {
public static void main(String[] args) {
try (Connection conn = getConnection();
PreparedStatement stmtCreate = conn.prepareStatement("CREATE TABLE test_c3p0 (id INT, name VARCHAR(32))");
PreparedStatement stmtInsert = conn.prepareStatement("INSERT INTO test_c3p0 VALUES (?, ?)");
PreparedStatement stmtDelete = conn.prepareStatement("DELETE FROM test_c3p0 WHERE id < ?");
PreparedStatement stmtUpdate = conn.prepareStatement("UPDATE test_c3p0 SET name = ? WHERE id = ?");
PreparedStatement stmtSelect = conn.prepareStatement("SELECT * FROM test_c3p0")) {
// Begin transaction
conn.setAutoCommit(false);
// Create table
stmtCreate.execute();
// Insert data
for (int i = 0; i < 10; i++) {
stmtInsert.setInt(1, i);
stmtInsert.setString(2, "test_insert" + i);
stmtInsert.executeUpdate();
}
// Delete data
stmtDelete.setInt(1, 5);
stmtDelete.executeUpdate();
// Update data
stmtUpdate.setString(1, "test_update");
stmtUpdate.setInt(2, 5);
stmtUpdate.executeUpdate();
// Query data
ResultSet rs = stmtSelect.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}
rs.close();
// Commit transaction
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Connection getConnection() throws Exception {
ComboPooledDataSource cpds = new ComboPooledDataSource("oceanbase");
return cpds.getConnection();
}
} ```
関連情報
MySQL Connector/J の詳細については、MySQL Connector/Jの概要 をご参照ください。