OB Cloud は、MySQL 公式 JDBC ドライバーによる接続をサポートしています。本記事では、MySQL Connector/J を使用して OB Cloud に接続し、操作する方法について説明します。
前提条件
- IntelliJ IDEAをダウンロードし、インストールしていること。
- JDK 1.8.0をダウンロードしていること。
- Mavenをダウンロードし、IntelliJ IDEAで設定していること。
- 本記事で使用されているプロジェクトのサンプルコードをダウンロードしていること。
バージョン互換性
MySQL Connector/Jバージョン |
推奨バージョン |
説明 |
|---|---|---|
| 5.x | 5.1.40 ~ 5.1.49 | 安定版 |
| 8.x | 8.0.7 ~ 8.0.25, 8.2.0 ~ 8.4.0 | 新機能サポート |
機能
- 標準的なJDBC APIをサポートします。
- 接続プール管理を提供します。
- SSL接続をサポートします。
- バッチ操作をサポートします。
- プリペアドステートメントをサポートします。
インストール後の確認
JDKが正常にインストールされているか確認します:
java -versionMavenが正常にインストールされているか確認します:
mvn -version(オプション)IntelliJ IDEAでのMaven設定が正しいか確認します:
この記事では、参考用の簡単なサンプルプロジェクトを提供しています。より複雑なサンプルの開発を試みる場合は、開発環境に適したバージョンのMavenをダウンロードし、以下の手順でIntelliJ IDEAに設定できます。
Mavenが正常にインストールされているか確認します:
mvn -versionIntelliJ IDEAを開き、IntelliJ IDEA > Settings > Build,Execution,Development > Build Tools > Maven をクリックし、Maven home path に Maven インストールパッケージのパスを設定します。

手順
- OB Cloudデータベースの接続情報を取得します。
- ダウンロードしたプロジェクトサンプルコードを修正します。
- プロジェクトサンプルコードを実行します。
Javaアプリケーションの作成
ステップ1:データベース接続文字列を取得する
OceanBase Cloudコンソールにログインします。インスタンスリストページで、対象インスタンスの情報を展開し、対象テナントの下で、接続 > 接続文字列の取得 を選択します。
詳細な操作については、接続文字列の取得を参照してください。
作成済みのOceanBase Cloudに基づいて、以下のURLの該当する情報を入力します。
obclient -h$host -P$port -u$user_name -p$password -D$database_nameパラメータ説明:
$host:OceanBase Cloudの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OceanBase Cloudの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベース名。注意
テナントに接続するアカウントは、データベースに対する
CREATE、INSERT、DROP、およびSELECT権限が付与されていなければなりません。アカウント権限の詳細については、アカウントの作成と管理を参照してください。$user_name:-uパラメータで指定し、データベースにアクセスするアカウントです。$password:アカウントのパスワードを指定します。
例:
obclient -h t********.********.oceanbase.cloud -P3306 -u mysql001 -p****** -D test
ステップ2:プロジェクトのサンプルコードを修正する
ダウンロードしたプロジェクトのサンプルを解凍します。
IntelliJ IDEA を開き、File > Open をクリックして、プロジェクトのサンプルファイルを追加します。
ステップ1で取得した接続文字列情報に基づいて、プロジェクトコード JDBCDemo > src > main > java > JDBCTest ファイル内の以下のデータベース接続パラメータを修正します。
コード内のデータベース接続パラメータを修正します。以下のフィールドと連結方法を参考にし、対応する値はステップ1で取得したデータベース接続文字列から取得します。
connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}") //例 jdbc:mysql://t********.********.oceanbase.cloud:3306/test?user=r***&password=******`host:
-hパラメータから取得します。OB Cloudデータベースの接続アドレスです。port:
-Pパラメータから取得します。OB Cloudデータベースの接続ポートです。dbname:
-Dパラメータから取得します。アクセスするデータベース名です。username:
-uパラメータから取得します。データベースにアクセスするアカウントです。password:
-pパラメータから取得します。アカウントのパスワードです。
修正後のコードスニペットの例は以下のとおりです:
//例 Connection connection = DriverManager.getConnection("jdbc:mysql://t********.********.oceanbase.cloud:3306/test?user=r***&password=******");注意
MySQL Connector/J 8.xを使用する場合、アカウントのパスワードに
#が含まれないようにしてください。含まれると、サンプルプロジェクトの実行時にエラーが発生します。
MySQL Connector/J 5.1.47ドライバを正しくインストールし、環境を設定した後、以下の Test.java ファイルのサンプルコードを使用してデータベースに接続および操作できます。
注意
MySQL Connector/J 8.xバージョンを使用する場合、Class.forName("com.mysql.jdbc.Driver") 内の com.mysql.jdbc.Driver は com.mysql.cj.jdbc.Driver に置き換える必要があります。
完全なコードの例は以下のとおりです:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) {
try {
//load driver
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
// Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
//create connection
Connection connection = DriverManager.getConnection("jdbc:mysql://t********.********.oceanbase.cloud:3306/test?user=r***&password=");
System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
Statement stmt = connection.createStatement();
//create table
stmt.execute("drop table if exists test");
stmt.execute("create table test (id int, name varchar(25))");
System.out.println("create table successfully");
//insert data
stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
System.out.println("insert data successfully");
//query data
System.out.println("query data : ");
ResultSet rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//update data
stmt.execute("update test set name = 'bbb' where id = 1");
System.out.println("update data successfully");
//query data after update
System.out.println("query data after update : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//delete data
stmt.execute("delete from test where id = 1");
System.out.println("delete data successfully");
//query data after delete
System.out.println("query data after delete : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//drop table
stmt.execute("drop table test");
//close
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
}
}
ステップ3:アプリケーションを実行する
IntelliJ IDEAでサンプルプロジェクトを実行します。以下の結果が返された場合、データベースへの接続に成功し、サンプルプロジェクトが正しく実行されたことを示します。
プロジェクトコードについて
mysql-connector/j をクリックして、プロジェクトコードをダウンロードします。これは、JDBCDemo.zip という名前の圧縮ファイルです。
解凍すると、JDBCDemo という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
JDBCDemo
├── src
│ └── main
│ └── java
│ └── JDBCTest.java
└── pom.xml
ファイルの説明:
src:ソースコードのルートディレクトリです。main:アプリケーションの主要なロジックを含むメインコードディレクトリです。java:Javaソースコードディレクトリです。JDBCTest.java:メインクラスで、テーブルの作成やデータの挿入などのロジックが含まれます。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>を使用して、プロジェクトの名前をJDBCDemoと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。
コード:
<groupId>org.example</groupId> <artifactId>JDBCDemo</artifactId> <version>1.0-SNAPSHOT</version>プロジェクトが依存するコンポーネントの設定。
データベースとのやり取りを行うために、
mysql-connector-java依存ライブラリを追加します:説明
このセクションのコードは、プロジェクトが依存するコンポーネントがMySQL Connector/JのV5.1.40バージョンであることを定義しています。他のバージョンの情報については、MySQL Connector/Jを参照してください。
<groupId>を使用して、依存関係が属する組織をmysqlと指定します。<artifactId>を使用して、依存関係の名前をmysql-connector-javaと指定します。<version>を使用して、依存関係のバージョン番号を5.1.40と指定します。
**コード:** ```java <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> ```
JDBCTest.javaコードの紹介
JDBCTest.java ファイルはサンプルプログラムの一部であり、MySQL Connector/Jを使用してデータベース操作を実行する方法を示すコードです。まずデータベース接続情報を設定し、次に JDBCTest オブジェクトを作成してデータベース操作を実行します。コードには、テーブルの作成、データの挿入、データのクエリの例も含まれています。
本記事の JDBCTest.java ファイルのコードは、主に以下の部分で構成されています:
JavaプログラムでJDBC APIを使用するために必要なJavaクラスをインポートします。
- Connectionはデータベースとの接続を確立するために使用されます。
- DriverManagerは一連のJDBCドライバーを管理します。
- ResultSetはSQLクエリが返すデータを処理するために使用されます。
- Statementは静的SQLステートメントを実行し、結果を返すために使用されます。
コード:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;JDBCTestクラスを作成し、mainメソッドを定義します。- プログラムのエントリポイントとして、
JDBCTestという名前のpublicクラスを定義します。クラス名はファイル名と一致させる必要があります。 - プログラムの実行開始点として、public staticメソッド
mainを定義します。 - その他のデータベース操作。
コード:
public class Main { public static void main(String[] args) { // データベース接続情報 // データソースの作成 // テーブルの作成 // データの挿入 // データの更新 // データの削除 } }- プログラムのエントリポイントとして、
データベース接続情報を定義します。
Class.forName()を使用してMySQL JDBCドライバーをロードおよび登録します。DriverManager.getConnection()メソッドで、データベース接続用のURL、ユーザー名、パスワードを定義します。$host、$port、$database_name、$user_name、$passwordは実際のデータベース接続情報に置き換える必要があります。
コード:
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5 //Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8 Connection connection = DriverManager.getConnection("jdbc:mysql://t********.********.oceanbase.cloud:3306/test?user=们ysql001&password=********");パラメータの説明:
$host:OB Cloudデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OB Cloudデータベースの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベースの名前です。$user_name:データベースへのアクセスアカウントを指定します。$password:アカウントのパスワードを指定します。
SQLステートメントを作成して実行します。
Statement stmt = connection.createStatement(); stmt.execute("...");テーブルを作成します。
コード:
// SQLステートメントを使用して、"test" という名前のテーブルが存在する場合削除します stmt.execute("drop table if exists test"); // "test" という名前の新しいテーブルを作成します。整数型の "id" と文字列型の "name" の2つのフィールドを含みます stmt.execute("create table test (id int, name varchar(25))"); // テーブル作成成功のメッセージを出力します System.out.println("create table successfully");データを挿入します。
コード:
// "test" テーブルに2行のデータを挿入します stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')"); // データ挿入成功のメッセージを出力します System.out.println("insert data successfully");データをクエリします。
コード:
// データクエリのメッセージを出力します System.out.println("query data : "); // クエリSQLステートメントを実行し、"test" テーブルの全データを取得します ResultSet rs = stmt.executeQuery("select * from test"); // 結果セットを走査します while (rs.next()) { // 各データの "id" と "name" フィールドを出力します System.out.println(rs.getString("id") + "\t" + rs.getString("name"));データを更新します。
コード:
// "test" テーブルのidが1のレコードの "name" フィールドを 'bbb' に更新します stmt.execute("update test set name = 'bbb' where id = 1"); // データ更新成功のメッセージを出力します System.out.println("update data successfully");データを削除します。
コード:
// "test" テーブルを削除します stmt.execute("drop table test"); // 結果セット、ステートメント、データベース接続を閉じます rs.close(); stmt.close(); connection.close();例外処理を行います。
上記のデータベース操作の実行中に例外が発生した場合、それらの例外はキャッチされ、エラーメッセージとスタックトレースの詳細が出力されます。
コード:
} catch (Exception e) { System.out.println("error!"); e.printStackTrace(); }
全コード表示
<?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>org.example</groupId>
<artifactId>JDBCDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.mysql</groupId>-->
<!-- <artifactId>mysql-connector-j</artifactId>-->
<!-- <version>8.0.33</version>-->
<!-- </dependency>-->
</dependencies>
</project>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) {
try {
//load driver
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
// Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
//create connection
Connection connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}");
System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
Statement stmt = connection.createStatement();
//create table
stmt.execute("drop table if exists test");
stmt.execute("create table test (id int, name varchar(25))");
System.out.println("create table successfully");
//insert data
stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
System.out.println("insert data successfully");
//query data
System.out.println("query data : ");
ResultSet rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//update data
stmt.execute("update test set name = 'bbb' where id = 1");
System.out.println("update data successfully");
//query data after update
System.out.println("query data after update : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//delete data
stmt.execute("delete from test where id = 1");
System.out.println("delete data successfully");
//query data after delete
System.out.println("query data after delete : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//drop table
stmt.execute("drop table test");
//close
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
}
}
ベストプラクティス
バッチ処理
バッチ処理を使用してパフォーマンスを向上:
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO test VALUES (?, ?)");
for (int i = 0; i < 1000; i++) {
pstmt.setInt(1, i);
pstmt.setString(2, "name" + i);
pstmt.addBatch();
}
pstmt.executeBatch();
プリペアドステートメント
プリペアドステートメントを使用してSQLインジェクションを防止:
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM test WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
よくある質問
1. 接続タイムアウト
接続タイムアウトパラメータの設定:
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000
2. 文字セットの問題
正しい文字セットを設定します:
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true
3. SSL接続
SSL接続を有効にします:
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true
4. アカウントパスワード内の特殊文字
アカウントのパスワードに特殊文字(例:#)が含まれている場合は、URLエンコードする必要があります:
String encodedPassword = URLEncoder.encode(password, "UTF-8");
注意
MySQL Connector/J 8.xバージョンを使用する場合、アカウントのパスワードに # 文字を含めないでください。含めると接続に失敗する可能性があります。
詳細を見る
Javaサンプルアプリケーションの作成については、OB Cloudデータベースのオープンソースコミュニティにも関連する完全なサンプルがあります。詳細については、Javaサンプルアプリケーションを参照してください。
mysql-connector/j サンプルプロジェクトをダウンロード