本記事では、DBCP接続プール、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環境やコンパイラを使用する場合は、操作手順が若干異なる可能性があります。
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:アクセスする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_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です。データベース接続のURLを設定します。ホストIP、ポート番号、アクセスするスキーマを含みます。
データベースのユーザー名を設定します。
データベースのパスワードを設定します。
コード:
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例外をスローする可能性があります。 - 文字列変数
createTableSqlを定義します。テーブル作成のSQLステートメントを格納するために使用されます。SQLステートメントでは、テーブル名をtest_tbl1と指定し、idという名前のNUMBER型の列と、nameという名前のVARCHAR2(32)型の列の2つの列を定義します。 conn.prepareStatement(createTableSql)メソッドを使用して、プリコンパイルされたSQLステートメントを実行するためのPreparedStatementオブジェクトcreateTableStmtを作成します。- SQLステートメントを実行するために
execute()メソッドを呼び出し、テーブルを作成します。
コード:
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()メソッドを使用して、SQLステートメントの最初のパラメータ値に文字列test_updateを設定します。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 サンプルプロジェクトをダウンロード