本記事では、DBCP接続プール、OceanBase Connector/J、およびOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、挿入、削除、更新、クエリなどの基本的なデータベース操作を実現する方法について説明します。
前提条件
OceanBaseデータベースがインストール済みで、Oracleモードのテナントが作成されていること。
JDK 1.8とMavenがインストール済みであること。
Eclipseがインストール済みであること。
説明
この記事でコードの実行にはEclipse IDE for Java Developers 2022-03バージョンを使用しています。ご自身の好みに合わせて、適切なツールを選択してサンプルコードを実行することも可能です。
操作手順
説明
本記事の操作手順はWindows環境に基づいています。他のOS環境やコンパイラを使用する場合は、操作手順が若干異なる場合があります。
dbcp-oceanbase-clientプロジェクトをEclipseにインポートします。- OceanBaseデータベースのURLを取得します。
dbcp-oceanbase-clientプロジェクトのデータベース接続情報を修正します。dbcp-oceanbase-clientプロジェクトを実行します。
ステップ1:dbcp-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_user001?user=test_user001@oracel001&password=******
ステップ3:dbcp-oceanbase-clientプロジェクトのデータベース接続情報を修正する
ステップ2:OceanBaseデータベースのURLを取得する で取得した情報に基づいて、ファイル dbcp-oceanbase-client/src/main/resources/db.properties のデータベース接続情報を修正します。
例:
- OBServerノードのIPアドレスは
xxx.xxx.xxx.xxxです。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
test_user001です。 - テナントの接続アカウントは
test_user001@oracle001です。oracle001はOceanBaseデータベースで作成されたOracleモードのユーザーテナントで、test_user001はテナントoracle001のユーザー名です。 - パスワードは
******です。
コード:
...
url=jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test_user001
username=test_user001@oracle001
password=******
...
ステップ4:dbcp-oceanbase-clientプロジェクトを実行する
プロジェクトナビゲータービューで、src/main/java ディレクトリを見つけて展開します。
Main.java ファイルを右クリックし、Run As -> Java Application を選択します。

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

OceanBaseクライアント(OBClient)で以下のSQLステートメントを実行して結果を確認することもできます。
obclient [SYS]> SELECT * FROM test_user001.test_tbl1;実行結果は以下のとおりです:
+------+--------------+ | ID | NAME | +------+--------------+ | 5 | test_update | | 6 | test_insert6 | | 7 | test_insert7 | | 8 | test_insert8 | | 9 | test_insert9 | +------+--------------+ 5 rows in set
プロジェクトコードについて
dbcp-oceanbase-client をクリックして、プロジェクトコードをダウンロードします。これは、dbcp-oceanbase-client.zip という名前の圧縮ファイルです。
解凍すると、dbcp-oceanbase-client という名前のフォルダが生成されます。ディレクトリ構造は以下のとおりです:
dbcp-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>を使用して、プロジェクトの名前をdbcp-oceanbase-clientと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。
コード:
<groupId>com.example</groupId> <artifactId>dbcp-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 Connector/JのバージョンV2.4.2を定義しています。他のバージョンの情報については、OceanBase JDBCドライバーを参照してください
<dependency>タグを使用して依存関係を定義します:oceanbase-client依存関係:
<groupId>を使用して、依存関係が属する組織をcom.oceanbaseと指定します。<artifactId>を使用して、依存関係の名前をoceanbase-clientと指定します。<version>を使用して、依存関係のバージョン番号を2.4.2と指定します。
dbcp依存関係:
<groupId>を使用して、依存関係が属する組織をorg.apache.commonsと指定します。<artifactId>を使用して、依存関係の名前をcommons-dbcp2と指定します。<version>を使用して、依存関係のバージョン番号を2.9.0と指定します。
コード:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.9.0</version> </dependency> </dependencies>
db.propertiesコードの紹介
db.properties は本記事の例となる接続プールの設定ファイルであり、接続プールの設定プロパティが含まれています。これらのプロパティには、ドライバーのクラス名、データベースURL、ユーザー名、パスワード、接続プールのサイズと制限、接続のタイムアウト時間、放棄された接続を処理するためのオプションが含まれます。
本記事の db.properties ファイルのコードは、主に以下のいくつかの部分が含まれます:
データベース接続パラメータを設定します。
ドライバーのクラス名を設定します。ここでは、OceanBase JDBCドライバーのクラス名
com.oceanbase.jdbc.Driverです。説明
OceanBase Connector/J実装クラスの名前については、OceanBase Javaデータベース接続ドライバーを参照してください。
データベース接続のURLを設定します。これには、ホストIPアドレス、ポート番号、アクセスするSchemaが含まれます。
データベースのユーザー名を設定します。
データベースのパスワードを設定します。
コード:
driverClassName=com.oceanbase.jdbc.Driver url=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:アカウントのパスワード。
他のDBCP接続プールのパラメータを設定します。
接続プールの初期サイズを
30に設定します。つまり、接続プールが最初に作成される接続数です。接続プールの最大接続数を
30に設定します。つまり、接続プール内で許容される最大接続数です。接続プール内で保持可能なアイドル状態の最大接続数を
10に設定します。接続プール中でアイドル状態を保持する最小接続数を
5に設定します。アイドル接続数がこの値を下回ると、接続プールは新しい接続を作成します。接続プールから接続を取得する際の最大待機時間(ミリ秒単位)を
1000に設定します。接続プール内のすべての接続が使用中で、利用可能な接続がない場合、接続取得操作は、接続が利用可能になるか、最大待機時間を超えるまで待機します。放棄された接続を削除するまでのタイムアウト時間(秒単位)は
1です。説明
removeAbandonedTimeoutのデフォルト値は300秒ですが、この例ではプログラムをテストするために1秒に設定されています。アプリケーションのニーズに合わせて、この値を適切に調整することができます。プログラム内の接続が使用されなくなった後、接続プールによって回収されるかどうか:
- メンテナンス中に放棄された接続を検出して、クリーンアップするかどうか設定します。
trueに設定します。 - 接続プールから接続を借用する際に、放棄された接続を検出してクリーンアップするかどうかを設定します。
trueに設定します。
- メンテナンス中に放棄された接続を検出して、クリーンアップするかどうか設定します。
コード:
initialSize=30 maxTotal=30 maxIdle=10 minIdle=5 maxWaitMillis=1000 removeAbandonedTimeout=1 removeAbandonedOnMaintenance=true removeAbandonedOnBorrow=true
注意
具体的なプロパティ(パラメータ)の設定は、プロジェクトの要件とデータベースの特性によって異なります。実際の状況に応じて調整と設定を行うことを推奨します。DBCP接続プールパラメータの詳細情報については、BasicDataSource Configuration Parameters を参照してください。
DBCP接続プールの基本データソース構成パラメータ:
| 分類 | プロパティ | 省略値 | 説明 |
|---|---|---|---|
| 必須パラメータ | driverClass | N/A | データベースドライバーのクラス名を指定します。 |
| url | N/A | データベースに接続するときに使用するURLを指定します。 | |
| username | N/A | データベースに接続するときに使用するユーザー名を指定します。 | |
| password | N/A | データベースに接続するために使用するパスワードを指定します。 | |
| 推奨構成パラメータ | initialSize | 0 | 接続プールの初期サイズを指定します。つまり、接続プールが起動時に作成する初期接続数です。0より大きい値に設定すると、接続プールが初期化されるときに指定された数の接続が作成されます。これにより、接続を事前に作成され、クライアントが初めて接続をリクエストしたときの遅延を軽減できます。 |
| maxTotal | 8 | 接続プールの最大接続数を指定します。つまり、接続プール内で存在が許容される最大接続数です。負の数値に設定すると、制限がないことを意味します。 | |
| maxIdle | 8 | 追加の接続を解放せずに接続プール内で保持可能なアイドル状態の最大接続数を指定します。負の数値に設定すると、制限がないことを意味します。 | |
| minIdle | 0 | 追加の接続を解放せずに接続プール内で保持するアイドル状態の最小接続数を指定します。負の数値に設定すると、制限がないことを意味します。 | |
| maxWaitMillis | indefinitely | 接続プールから接続を取得する際の最大待ち時間(ミリ秒単位)を指定します。-1に設定すると、無限に待機することを意味します。正の数値に設定すると、接続プール内のすべての接続が使用されている場合、接続の取得を待機している操作は指定された時間を待機し、時間を超えると例外がスローされます。 | |
| validationQuery | N/A | 接続が有効であるかどうかを検証するために使用するSQLクエリステートメントを指定します。指定されている場合、このクエリは少なくとも1行を返す SQL SELECT ステートメントである必要があります。指定されていない場合、接続は isValid() メソッドを呼び出して検証されます。 |
|
| testOnBorrow | true | 接続プールからオブジェクトを借用するときに、検証を実行するかどうかを指定します。オブジェクトが検証できない場合、接続プールから削除され、別のオブジェクトの借用が試みられます。 | |
| testWhileIdle | false | 接続プールがアイドル状態のときに、検証を実行するかどうかを指定します。true に設定する場合、接続プールは定期的に検証クエリを実行してアイドル接続の有効性を検証します。オブジェクトが検証に失敗した場合、接続プールから削除されます。 |
|
| オプションパラメータ | connectionProperties | N/A | キーと値のペア形式で追加の接続プロパティを指定します。これらのプロパティは、データベース接続を取得する際に、最下層のJDBCドライバーに渡されます。文字列のフォーマットは propertyName=property; である必要があります
注意
|
|
false | これら2つのパラメータは、接続が放棄されたと見なされる場合の削除動作を制御するために使用されます。
true に設定することで、接続プールは放棄された接続を自動的に検出および削除することができます。放棄された接続とは、長期間使用されていない接続のことです。これは、アプリケーションが接続を適切に閉じなかったことを起因とする可能性があります。これらの放棄された接続を削除することで、データベースリソースを解放し、接続プールのパフォーマンスと効率を向上させることができます。 |
Main.javaコードの紹介
Main.java ファイルはサンプルプログラムの一部であり、DBCP接続プールを使用してデータベース接続を取得し、テーブルの作成、データの挿入、削除、更新、クエリといった一連のデータベース操作を実行し、クエリ結果を出力する方法を示します。
本記事の Main.java ファイルのコードには、主に以下のいくつの部分が含まれます:
必要なクラスとインターフェースをインポートします。
ファイルの読み込み、データベースの操作、データベース接続プールに関連するクラスとインターフェースを含む、必要なクラスとインターフェースをインポートします。これらのクラスとインターフェースは、以降のコードで使用されます。
com.exampleという名前のパッケージを宣言します。このパッケージは現在のJavaクラスを格納するために使用されます。java.io.FileInputStreamクラスをインポートします。これはファイルを読み込むために使用されます。java.sql.Connectionインターフェースをインポートします。これはデータベースへの接続を意味ます。java.sql.PreparedStatementインターフェースをインポートします。これはプリコンパイルされたSQLステートメントを意味ます。java.sql.ResultSetインターフェースをインポートします。これはデータベースクエリの結果セットを意味します。java.sql.SQLException例外クラスをインポートします。これは、SQL操作中に発生する例外を意味します。java.util.Propertiesクラスをインポートします。これは設定ファイルをロードするために使用されます。org.apache.commons.dbcp2.BasicDataSourceクラスをインポートします。これはデータベース接続プールを意味します。org.apache.commons.dbcp2.BasicDataSourceFactoryクラスをインポートし、データベースの接続プールを作成するために使用されます。
コード:
package com.example; import java.io.FileInputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory;クラス名とメソッドを定義します。
- Mainクラスを作成し、プログラムのエントリポイントとして
mainメソッドを定義します。 mainメソッド内で、まずcreateDataSource()メソッドを呼び出して、接続プールオブジェクトdataSourceを作成します。try-with-resourcesステートメントを使用して、接続プールオブジェクトのライフサイクルの終了時にリソースが自動的に閉じます。tryコードブロック内で、getConnection()メソッドを呼び出して、接続プールからデータベース接続オブジェクトconnを取得します。createTable()、insertData()、deleteData()、updateData()、queryData()の各メソッドを順に呼び出して、対応するデータベース操作を実行します。- 例外が発生した場合、
catchブロックで例外情報を出力します。
コード:
public class Main { public static void main(String[] args) { try (BasicDataSource dataSource = createDataSource()) { try (Connection conn = dataSource.getConnection()) { createTable(conn); insertData(conn); deleteData(conn); updateData(conn); queryData(conn); } } catch (Exception e) { e.printStackTrace(); } } // 接続プールの作成 // テーブルを作成するためのメソッドを定義する // データを挿入するためのメソッドを定義する // データを削除するためのメソッドを定義する // データを更新するたのメソッドを定義する // データをクエリするためのメソッドを定義する }- Mainクラスを作成し、プログラムのエントリポイントとして
接続プールを作成します。
データベース接続プールを作成するための便利なメソッドを提供し、設定ファイルからパラメータを読み取って接続プールオブジェクトを初期化します。具体的な手順は以下のとおりです:
- プライベート静的メソッド
createDataSource()を定義し、BasicDataSourceタイプを返します。このメソッドはException例外をスローする可能性があります。 - データベース接続の設定情報をストレージするための
Propertiesオブジェクトpropsを作成します。 src/main/resourcesディレクトリにあるdb.propertiesファイルを読み取るためのFileInputStreamオブジェクトisを作成します。load()メソッドを使用して、db.propertiesファイル内のキーと値のペアを props オブジェクトにロードします。BasicDataSourceFactory.createDataSource(props)メソッドを呼び出し、propsオブジェクトをパラメータとして使用して、BasicDataSourceオブジェクトを作成して返します。
コード:
private static BasicDataSource createDataSource() throws Exception { Properties props = new Properties(); FileInputStream is = new FileInputStream("src/main/resources/db.properties"); props.load(is); return BasicDataSourceFactory.createDataSource(props); }- プライベート静的メソッド
テーブルを作成するためのメソッドを定義します。
データベース内に指定のテーブルを作成するためのメソッドを提供します。これは接続オブジェクトをパラメータとして受け取り、プリコンパイルされた方式でテーブル作成用のSQLステートメントを実行します。具体的な手順は以下のとおりです:
- プライベート静的メソッド
createTable()を定義し、Connectionオブジェクトをパラメータとして受け取ります。メソッドはSQLException例外をスローする可能性があります。 - テーブル作成用のSQLステートメントをストレージするための文字列変数
createTableSqlを定義します。SQLステートメントでテーブル名をtest_tbl1と指定し、2つの列を定義します。1つはidという名前のNUMBERタイプ列で、もう1つはnameという名前のVARCHAR2(32)タイプ列です。 conn.prepareStatement(createTableSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトcreateTableStmtを作成します。- テーブルを作成するために、
execute()メソッドを呼び出してSQLステートメントを実行します。
コード:
private static void createTable(Connection conn) throws SQLException { String createTableSql = "CREATE TABLE test_tbl1 (id NUMBER, name VARCHAR2(32))"; try (PreparedStatement createTableStmt = conn.prepareStatement(createTableSql)) { createTableStmt.execute(); } }- プライベート静的メソッド
データを挿入するためのメソッドを定義します。
データベースのテーブルに指定されたデータを挿入するためのメソッドを提供します。これは接続オブジェクトをパラメータとして受け取り、プリコンパイルされた方式を使用して、データ挿入用のSQLステートメントを実行します。具体的な手順は以下のとおりです:
プライベート静的メソッド
insertData()を定義します。このメソッドはConnectionオブジェクトをパラメータとして受け取ります。メソッドはSQLException例外をスローする可能性があります。データ挿入用のSQLステートメントをストレージするための文字列変数
insertDataSqlを定義します。conn.prepareStatement(insertDataSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトinsertDataStmtを作成します。forループを使用してテーブルにデータを挿入:10回ループして、ループごとに1件のデータを挿入します。setInt()メソッドを使用して、ループ変数iの値をSQLステートメントの最初のパラメータ値に設定します。setString()メソッドを使用して、文字列test_insert + iをSQLステートメントの2番目のパラメータ値に設定します。- データベースにデータを挿入するために、
executeUpdate()メソッドを呼び出してSQLステートメントを実行します。
コード:
private static void insertData(Connection conn) throws SQLException { String insertDataSql = "INSERT INTO test_tbl1 (id, name) VALUES (?, ?)"; try (PreparedStatement insertDataStmt = conn.prepareStatement(insertDataSql)) { for (int i = 0; i < 10; i++) { insertDataStmt.setInt(1, i); insertDataStmt.setString(2, "test_insert" + i); insertDataStmt.executeUpdate(); } } }データを削除するためのメソッドを定義します。
特定条件を満たすデータをデータベースから削除するためのメソッドを提供します。これは、接続オブジェクトをパラメータとして受け取り、プリコンパイルされた方式を使用して、データを削除するSQLステートメントを実行します。具体的な手順は以下のとおりです:
- プライベート静的メソッド
deleteData()を定義して、Connectionオブジェクトをパラメータとして受け取ります。メソッドはSQLException例外をスローする可能性があります。 - データ削除用のSQLステートメントをストレージするための文字列変数
deleteDataSqlを定義します。 conn.prepareStatement(deleteDataSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトdeleteDataStmtを作成します。setInt()メソッドを使用して、SQLステートメントのパラメータ値として数字5を設定します。- 条件を満たすデータをデータベースから削除するために、
executeUpdate()メソッドを呼び出してSQLステートメントを実行します。
コード:
private static void deleteData(Connection conn) throws SQLException { String deleteDataSql = "DELETE FROM test_tbl1 WHERE id < ?"; try (PreparedStatement deleteDataStmt = conn.prepareStatement(deleteDataSql)) { deleteDataStmt.setInt(1, 5); deleteDataStmt.executeUpdate(); } }- プライベート静的メソッド
データを更新するためのメソッドを定義します。
特定の条件を満たすデータをデータベース内で更新するためのメソッドを提供します。これは接続オブジェクトをパラメータとして受け取り、プリコンパイルされた方式でデータを更新するSQLステートメントを実行します。具体的な手順は以下のとおりです:
- プライベート静的メソッド
updateData()を定義し、Connectionオブジェクトをパラメータとして受け取ります。メソッドはSQLException例外をスローする可能性があります。 - データを更新するのSQLステートメントをストレージするための文字列変数
updateDataSqlを定義します。 conn.prepareStatement(updateDataSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトupdateDataStmtを作成します。setString()メソッドを使用して、文字列test_updateをSQLステートメントの最初のパラメータ値に設定します。setInt()メソッドを使用して、SQLステートメントの2番目のパラメータ値として数値5を設定します。- 条件を満たすデータをデータベース内で更新するために、
executeUpdate()メソッドを呼び出してSQLステートメントを実行します。
コード:
private static void updateData(Connection conn) throws SQLException { String updateDataSql = "UPDATE test_tbl1 SET name = ? WHERE id = ?"; try (PreparedStatement updateDataStmt = conn.prepareStatement(updateDataSql)) { updateDataStmt.setString(1, "test_update"); updateDataStmt.setInt(2, 5); updateDataStmt.executeUpdate(); } }- プライベート静的メソッド
データのクエリを行うためのメソッドを定義します。
データベースからデータをクエリして処理するためのメソッドを提供します。接続オブジェクトをパラメータとして受け取り、プリコンパイルされた方式でデータをクエリするSQLステートメントを実行します。具体的な手順は以下のとおりです:
プライベート静的メソッド
queryData()を定義し、Connectionオブジェクトをパラメータとして受け取ります。メソッドはSQLException例外をスローする可能性があります。データをクエリするSQLステートメントをストレージするための文字列変数
queryDataSqlを定義します。conn.prepareStatement(queryDataSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトqueryDataStmtを作成します。queryDataStmt.executeQuery()メソッドを使用してSQLクエリを実行し、ResultSetオブジェクトrsを使用してクエリ結果を受け取ります。whileループを使用して、rs.next()メソッドでクエリ結果セットをイテレーション:getInt()メソッドを使用して、結果セットの中からidという名前の列の整数値を取得し、変数idに代入します。getString()メソッドを使用して、結果セットの中からnameという名前の列の文字列値を取得し、変数nameに代入します。- クエリ結果の
idとnameを出力します。
コード:
private static void queryData(Connection conn) throws SQLException { String queryDataSql = "SELECT * FROM test_tbl1"; try (PreparedStatement queryDataStmt = conn.prepareStatement(queryDataSql)) { try (ResultSet rs = queryDataStmt.executeQuery()) { while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("id: " + id + ", name: " + name); } } } }
全コード表示
<?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.example</groupId>
<artifactId>dbcp-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>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
# Database Connect Information
driverClassName=com.oceanbase.jdbc.Driver
url=jdbc:oceanbase://$host:$port/$schema_name
username=$user_name
password=$password
# ConnectionPool Parameters
initialSize=30
maxTotal=30
maxIdle=10
minIdle=5
maxWaitMillis=1000
removeAbandonedTimeout=1
removeAbandonedOnMaintenance=true
removeAbandonedOnBorrow=true
package com.example;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class Main {
public static void main(String[] args) {
try (BasicDataSource dataSource = createDataSource()) {
try (Connection conn = dataSource.getConnection()) {
createTable(conn);
insertData(conn);
deleteData(conn);
updateData(conn);
queryData(conn);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// Create ConnectionPool
private static BasicDataSource createDataSource() throws Exception {
Properties props = new Properties();
FileInputStream is = new FileInputStream("src/main/resources/db.properties");
props.load(is);
return BasicDataSourceFactory.createDataSource(props);
}
// Create table
private static void createTable(Connection conn) throws SQLException {
String createTableSql = "CREATE TABLE test_tbl1 (id NUMBER, name VARCHAR2(32))";
try (PreparedStatement createTableStmt = conn.prepareStatement(createTableSql)) {
createTableStmt.execute();
}
}
// Insert data
private static void insertData(Connection conn) throws SQLException {
String insertDataSql = "INSERT INTO test_tbl1 (id, name) VALUES (?, ?)";
try (PreparedStatement insertDataStmt = conn.prepareStatement(insertDataSql)) {
for (int i = 0; i < 10; i++) {
insertDataStmt.setInt(1, i);
insertDataStmt.setString(2, "test_insert" + i);
insertDataStmt.executeUpdate();
}
}
}
// Delete data
private static void deleteData(Connection conn) throws SQLException {
String deleteDataSql = "DELETE FROM test_tbl1 WHERE id < ?";
try (PreparedStatement deleteDataStmt = conn.prepareStatement(deleteDataSql)) {
deleteDataStmt.setInt(1, 5);
deleteDataStmt.executeUpdate();
}
}
// Update data
private static void updateData(Connection conn) throws SQLException {
String updateDataSql = "UPDATE test_tbl1 SET name = ? WHERE id = ?";
try (PreparedStatement updateDataStmt = conn.prepareStatement(updateDataSql)) {
updateDataStmt.setString(1, "test_update");
updateDataStmt.setInt(2, 5);
updateDataStmt.executeUpdate();
}
}
// Query data
private static void queryData(Connection conn) throws SQLException {
String queryDataSql = "SELECT * FROM test_tbl1";
try (PreparedStatement queryDataStmt = conn.prepareStatement(queryDataSql)) {
try (ResultSet rs = queryDataStmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + ", name: " + name);
}
}
}
}
}
関連ドキュメント
OceanBase Connector/Jの詳細については、OceanBase JDBCドライバーを参照してください。
クリックしてdbcp-oceanbase-clientサンプルプロジェクトをダウンロード