本記事では、OceanBase Connector/JとOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実装する方法について説明します。
前提条件
OceanBaseデータベースがインストール済みであること。
JDK 1.8とMavenがインストール済みであること。
Eclipseがインストール済みであること。
説明
この記事はEclipse IDE for Java Developers 2022-03バージョンを使用してコードを実行していますが、お好みのツールを選んでサンプルコードを実行することもできます。
操作手順
説明
本記事の操作手順はWindows環境に基づいています。他の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:Javaアプリケーションを自動的にコンパイルして実行するためのShellスクリプトです。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インターフェース:データベース内の1つのステートメントを表します。
コード:
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と定義します。これはpublic staticメソッドであることを示しています。パラメータとして文字列配列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という名前のテーブルを作成します。テーブルが既に存在する場合は、削除してから作成します。具体的な手順は以下のとおりです:- データベースにSQLステートメントを送信するために使用される
Statementオブジェクトstmtを作成します。 stmtオブジェクトのexecuteメソッドを呼び出し、SQLステートメントdrop table personを渡してpersonという名前のテーブルを削除します。personテーブルが存在するかどうか不明なため、try-catch構造を使用して例外を捕捉し、存在しないテーブルを削除しようとした場合にプログラムがクラッシュするのを防ぎます。- 再び
stmtオブジェクトのexecuteメソッドを呼び出し、SQLステートメントcreate table person (name varchar(50), age int)を渡してpersonという名前のテーブルを作成します。このテーブルには2つのフィールドnameとageが含まれ、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)");- データベースにSQLステートメントを送信するために使用される
テーブルにデータを挿入します。
PreparedStatementインターフェースを使用して、データベースのpersonテーブルに2つのデータを挿入します。具体的な手順は以下のとおりです:- SQLステートメントを実行するために、
PreparedStatementオブジェクトpsを作成します。SQLステートメントはinsert into person values(?, ?)です。?はプレースホルダーであり、具体的な値を入力する必要があることを示します。 setString()メソッドを呼び出して、1番目のプレースホルダー(1番目の疑問符)をAdamに設定します。setInt()メソッドを呼び出して、2番目のプレースホルダー(2番目の疑問符)を28に設定します。- 更新操作を実行して、データをデータベースに挿入します。
- 再び
setString()メソッドを呼び出して、1番目のプレースホルダーを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();- SQLステートメントを実行するために、
すべてのレコードを取得します。
personテーブルからすべてのデータをクエリし、結果をコンソールに出力します。具体的な手順は以下のとおりです:- SQLステートメントを実行するために、
PreparedStatementオブジェクトpsを作成します。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."); }- SQLステートメントを実行するために、
データベースリソースをリリースします。
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サンプルプロジェクトをダウンロード