本記事では、OceanBase Connector/J と OceanBase データベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、クエリなどの基本操作を実装する方法を紹介します。
前提条件
OceanBaseデータベースがインストール済みであること。
JDK 1.8およびMavenがインストール済みであること。
Eclipseがインストール済みであること。
説明
このドキュメントでコードを実行するために使用するツールは、Eclipse IDE for Java Developers 2022-03バージョンです。個人の好みに応じて、適したツールを選択してサンプルコードを実行することもできます。
手順
説明
本記事で示す操作手順は、Windows環境でEclipse IDE for Java Developers 2022-03を使用してこのプロジェクトをコンパイルおよび実行する場合のものです。他のOS環境やコンパイラを使用する場合は、操作手順が若干異なる可能性があります。
java-oceanbase-jdbcプロジェクトをEclipseにインポートします。- OceanBaseデータベースのURLを取得します。
java-oceanbase-jdbcプロジェクト内のデータベース接続情報を変更します。java-oceanbase-jdbcプロジェクトを実行します。
ステップ1:java-oceanbase-jdbcプロジェクトをEclipseにインポートする
Eclipseを開き、FileメニューからImportオプションを選択します。

表示されたインポートウィンドウで、Maven > Existing Maven Projectsを選択し、Nextをクリックします。

次のページで、Browseボタンをクリックし、Mavenプロジェクトのルートディレクトリを選択して、Finishをクリックします。

Eclipseは、プロジェクト内の
pom.xmlファイルを自動的に認識し、Package ExplorerにすべてのMavenプロジェクトを表示します。Eclipseの左側のパネルには、Package Explorerのアイコンが表示されます。表示されない場合は、Windowメニューを選択し、Show View > Package Explorerを選択することができます。説明
Eclipseを使用してMavenプロジェクトをインポートすると、プロジェクト内の
pom.xmlファイルを自動的に検出し、その記述に基づいて必要な依存ライブラリをダウンロードしてプロジェクトに追加します。
プロジェクトの状況を確認します。

ステップ2:OceanBaseデータベースのURLを取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
例:
obclient -hxxx.xxx.xxx.xxx -P2883 -usys@oracel001#cluster_name -p******接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
OceanBaseデータベースの接続文字列情報に基づいて、以下のURLの対応する情報を入力します。
OceanBaseデータベースOracleモードへの接続URLの例:
jdbc:oceanbase://$host:$port/$schema_name?user=$user_name&password=$passwordパラメータ説明:
$host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$schema_name:アクセスするスキーマ名。$user_name:テナントの接続アカウント。ODP接続方式の形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
URLパラメータの詳細については、データベースURLを参照してください。
ステップ3:java-oceanbase-jdbcプロジェクトのデータベース接続情報を修正する
ステップ2:OceanBaseデータベースのURLを取得する の情報に基づいて、InsertAndSelectExample.java ファイル内のデータベース接続情報を修正します。
例:
- OBServerノードのIPアドレスは
10.10.10.1です。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
sysです。 - テナントの接続アカウントは
sys@oracle001です。oracle001はOceanBaseデータベースで作成されたOracleモードのユーザーテナントであり、sysはテナントoracle001のユーザー名です。 - パスワードは
******です。
サンプルコードは以下のとおりです:
String url = "jdbc:oceanbase://10.10.10.1:2881/sys";
String user = "sys@oracle001";
String password = "******";
ステップ4:java-oceanbase-jdbcプロジェクトを実行する
Package Explorerでプロジェクト構造を確認できます。

プロジェクト内のMainクラスを見つけ、右クリックしてRun As > **Run Configurations...**を選択し、Run Configurationsページを開きます。

Run Configurationsページで、Java Application > New_configurationページのMain classから
com.oceanbase.example.InsertAndSelectExampleプロジェクトを選択します。
Eclipseのコンソールでプロジェクトのログ情報と出力結果を確認します。

プロジェクトコードについて
java-oceanbase-jdbc をクリックしてプロジェクトコードをダウンロードします。これは、java-oceanbase-jdbc.zip という名前の圧縮ファイルです。
解凍すると、java-oceanbase-jdbc という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
.
|-- README-CN.md
|-- README.md
|-- pom.xml
|-- run.sh
`-- src
`-- main
`-- java
`-- com
`-- oceanbase
`-- example
|-- InsertAndSelectExample.java
`-- OceanBaseClientTest.java
ファイルの説明:
README-CN.md:このファイルはプロジェクトの説明ドキュメントで、主に中国語ユーザー向けです。README.md:このファイルもプロジェクトの説明ドキュメントですが、英語で書かれており、主に英語ユーザー向けです。pom.xml:このファイルは Maven プロジェクトの設定ファイルで、プロジェクトの依存関係、プラグイン、ビルドルールなどの情報を定義しています。run.sh:このファイルは Shell スクリプトで、主に Java アプリケーションの自動コンパイルと実行に使用されます。src:このディレクトリにはプロジェクトのソースコードとリソースファイルが含まれており、プロジェクトの主要なディレクトリです。main:このディレクトリは Java ソースコードディレクトリで、プロジェクトの主要なコードが含まれています。java:このディレクトリは Java ソースコードのルートディレクトリです。com:このディレクトリは Java パッケージのルートディレクトリです。oceanbase:このディレクトリはcomパッケージのサブパッケージで、このプロジェクトが OceanBase データベースに関連していることを示しています。example:このディレクトリはoceanbaseパッケージのサブパッケージで、このプロジェクトが OceanBase JDBC ドライバを使用して OceanBase データベースに接続し、操作する方法をデモンストレーションするサンプルプログラムであることを示しています。InsertAndSelectExample.java:このファイルはサンプルプログラムの一部で、データの挿入とクエリの方法をデモンストレーションするInsertAndSelectExampleというサンプルクラスが含まれています。OceanBaseClientTest.java:このファイルもサンプルプログラムの一部で、データベースへの接続、SQL ステートメントの実行、データのクエリなどの操作方法をデモンストレーションするOceanBaseClientTestというサンプルクラスが含まれています。
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.oceanbase.exampleと指定します。<artifactId>を使用して、プロジェクトの依存関係をoceanbase-clientと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。<name>を使用して、プロジェクトの名前をob-example-oceanbase-clientと設定します。
コード:
<groupId>com.oceanbase.example</groupId>
<artifactId>oceanbase-client</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ob-example-oceanbase-client</name>
<properties>を使用して、プロジェクトソースファイルのプロパティを定義します。<project.build.sourceEncoding>を使用して、プロジェクトソースファイルのエンコーディングをUTF-8と指定します。<maven.compiler.source>を使用して、Mavenコンパイラが使用するJavaソースコードのバージョンを1.8と指定します。<maven.compiler.target>を使用して、Mavenコンパイラが生成するJavaバイトコードのバージョンを1.8と指定します。<exec.mainClass>を使用して、プロジェクト内のサンプルプログラムcom.oceanbase.example.InsertAndSelectExampleを指定します。
コード:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<exec.mainClass>com.oceanbase.example.InsertAndSelectExample</exec.mainClass>
</properties>
<dependencies>を使用して、プロジェクトが依存するコンポーネントを定義します。説明
このセクションのコードは、プロジェクトが依存するコンポーネントとしてOceanBase Connector/JのV2.4.2バージョンを定義しています。他のバージョンの情報については、OceanBase JDBCドライバを参照してください。
<dependency>を使用して、依存関係を定義します。<groupId>を使用して、依存関係が属する組織をcom.oceanbaseと指定します。<artifactId>を使用して、依存関係の名前をoceanbase-clientと指定します。<version>を使用して、依存関係のバージョン番号を2.4.2と指定します。
コード:
<dependencies>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
InsertAndSelectExample.java コードの紹介
InsertAndSelectExample.java ファイルはサンプルプログラムの一部であり、データの挿入とクエリの方法を示すサンプルクラス InsertAndSelectExample を含みます。
本記事の InsertAndSelectExample.java ファイルのコードは、主に以下の部分で構成されています:
パッケージの定義と
java.sqlインターフェースのインポート。このファイルが属するパッケージ名を
com.oceanbase.exampleと宣言します。java.sqlパッケージの以下のインターフェースとクラスをインポートします:Connectionインターフェース:データベースへの接続を表します。DriverManagerクラス:JDBCドライバーの登録とデータベース接続の取得を管理するための静的メソッドのセットを提供します。その中で最も一般的に使用されるメソッドはgetConnection()で、データベースへの接続を作成するために使用されます。PreparedStatementインターフェース:プリコンパイルされたSQLステートメントを表します。ResultSetインターフェース:クエリ結果セットを表します。SQLException例外クラス:JDBCを使用してデータベースに接続する際に発生するさまざまな異常状況を表します。例えば、接続失敗やSQLコマンドの実行失敗などです。Statementインターフェース:データベース内のステートメントを表します。
コード:
package com.oceanbase.example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;クラス名と
mainメソッドの定義。クラス名を
InsertAndSelectExampleと定義します。これはファイル名と一致させる必要があります。mainメソッドをpublic static voidとして定義します。これは公開静的メソッドであり、文字列配列argsをパラメータとして受け取ります。throws ClassNotFoundException, SQLExceptionを使用することで、このメソッドがClassNotFoundExceptionおよびSQLException例外をスローする可能性があることを示し、メソッド呼び出し時に処理を行う必要があることを示します。コード:
public class InsertAndSelectExample { public static void main(String[] args) throws ClassNotFoundException, SQLException { // to do: // 3.connect to your database // 4.create a table // 5.insert records // 6.fetch all records // 7.release all resources } }データベースへの接続とデータベース接続オブジェクトの取得。
OceanBaseデータベースへの接続に必要なURL文字列と追加の接続プロパティを定義します。ここでは:
jdbc:oceanbase:OceanBaseのJDBCドライバーを使用してデータベースに接続することを表します。host:port:OceanBaseデータベースのIPアドレスとポート番号を表します。opt1=val1&opt2=val2...:追加の接続プロパティ、つまりURLパラメータです。URLの追加の接続プロパティの詳細については、データベースURLを参照してください。schema_name:接続するスキーマ名を表します。String user = "user_name":データベースへのログインに必要なユーザー名を定義します。String password = "******":データベースへのログインに必要なパスワードを定義します。
データベース接続オブジェクトを取得します:
ClassのforNameメソッドを呼び出して、指定されたクラス名com.oceanbase.jdbc.Driverのドライバークラスをロードします。DriverManagerクラスのgetConnectionメソッドを呼び出して、Connectionオブジェクトconnを取得します。
コード:
String url = "jdbc:oceanbase://host:port/schema_name?[opt1=val1&opt2=val2...]"; String user = "user_name"; String password = "******"; Class.forName("com.oceanbase.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password);テーブルの作成。
nameとageの2つのフィールドを持つpersonという名前のテーブルを作成します。このテーブルが既に存在する場合は、削除してから作成します。具体的な手順は以下のとおりです:stmtという名前のStatementオブジェクトを作成し、データベースにSQLステートメントを送信するために使用します。stmtオブジェクトのexecuteメソッドを呼び出し、SQLステートメントdrop table personを渡してpersonという名前のテーブルを削除します。personテーブルが既に存在するかどうかは不確定なため、try-catchストラクチャを使用して例外をキャッチし、存在しないテーブルを削除した際のプログラムのクラッシュを防ぎます。- 再度
stmtオブジェクトのexecuteメソッドを呼び出し、SQLステートメントcreate table person (name varchar(50), age int)を渡してpersonという名前のテーブルを作成します。このテーブルにはnameとageの2つのフィールドが含まれ、nameフィールドの型はvarchar(50)、ageフィールドの型はintです。
コード:
Statement stmt = conn.createStatement(); try {stmt.execute("drop table person");} catch (Exception ignore) {} stmt.execute("create table person (name varchar(50), age int)");テーブルにデータの挿入。
PreparedStatementインターフェースを使用して、データベースのpersonテーブルに2件のデータを挿入します。具体的な手順は以下のとおりです:psという名前のPreparedStatementオブジェクトを作成し、SQLステートメントを実行するために使用します。SQLステートメントはinsert into person values(?, ?)で、?はプレースホルダーであり、具体的な値を埋め込む必要があることを示します。setString()メソッドを呼び出して、最初のプレースホルダー(つまり最初の疑問符)をAdamに設定します。setInt()メソッドを呼び出して、2番目のプレースホルダー(つまり2番目の疑問符)を28に設定します。- 更新操作を実行して、データをデータベースに挿入します。
- 再度
setString()メソッドを呼び出して、最初のプレースホルダーを "Eve" に設定します。 - 再度
setInt()メソッドを呼び出して、2番目のプレースホルダーを26に設定します。 - 再度更新操作を実行して、2件目のデータをデータベースに挿入します。
コード:
PreparedStatement ps = conn.prepareStatement("insert into person values(?, ?)"); ps.setString(1, "Adam"); ps.setInt(2, 28); ps.executeUpdate(); ps.setString(1, "Eve"); ps.setInt(2, 26); ps.executeUpdate();すべてのレコードの取得。
personテーブルからすべてのデータをクエリし、結果をコンソールに出力します。具体的な手順は以下のとおりです:psという名前のPreparedStatementオブジェクトを作成し、SQLステートメントを実行するために使用します。SQLステートメントはselect * from personで、personテーブルのすべてのデータをクエリすることを表します。setFetchDirection()メソッドを使用して結果セットのカーソルを前方移動に設定し、setConcurrency()メソッドを使用して結果セットを読み取り専用に設定します。- クエリ操作を実行して、クエリ結果を
ResultSetオブジェクトに格納します。ResultSetオブジェクトの名前をrsとします。 whileループを使用してResultSetオブジェクトを走査し、rs.next()メソッドを使用してカーソルを次の行のデータに移動します。データが残っている場合はtrueを返します。 ループ内部では、rs.getString(1)メソッドを使用して1列目の値(つまりpersonテーブルのname)を取得し、rs.getInt(2)を使用して2列目の値(つまりage)を取得し、これらの値をname is age years old.の形式でコンソールに出力します。- ループ終了後、
ResultSetとPreparedStatementオブジェクトを閉じます。
コード:
ps = conn.prepareStatement("select * from person", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); ResultSet rs = ps.executeQuery(); while (rs.next()) { System.out.println(rs.getString(1) + " is " + rs.getInt(2) + " years old."); }データベースリソースの解放。
PreparedStatement、Statement、Connectionオブジェクトを閉じ、関連するデータベースリソースを解放することで、リソース消費とパフォーマンス問題を回避します。コード:
ps.close(); stmt.close(); conn.close();
全コード表示
<?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.example</groupId>
<artifactId>oceanbase-client</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ob-example-oceanbase-client</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<exec.mainClass>com.oceanbase.example.InsertAndSelectExample</exec.mainClass>
</properties>
<dependencies>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
</project>
package com.oceanbase.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertAndSelectExample {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oceanbase://host:port/schema_name?[opt1=val1&opt2=val2...]";
String user = "user_name";
String password = "******";
Class.forName("com.oceanbase.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
try {
stmt.execute("drop table person");
} catch (Exception ignore) {
}
stmt.execute("create table person (name varchar2(50), age int)");
PreparedStatement ps = conn.prepareStatement("insert into person values(?, ?)");
ps.setString(1, "Adam");
ps.setInt(2, 28);
ps.executeUpdate();
ps.setString(1, "Eve");
ps.setInt(2, 26);
ps.executeUpdate();
ps = conn.prepareStatement("select * from person", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1) + " is " + rs.getInt(2) + " years old.");
}
ps.close();
stmt.close();
conn.close();
}
}
関連ドキュメント
OceanBase Connector/Jの詳細については、OceanBase JDBCドライバを参照してください。
クリックしてjava-oceanbase-jdbcサンプルプロジェクトをダウンロード