本記事では、Spring JDBCフレームワーク、MySQL Connector/J、およびOB Cloudデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、クエリなどの基本的なデータベース操作を実現する方法を紹介します。
機能
- 基本的なCRUD操作をサポートします。
- トランザクション管理を提供します。
- 例外処理メカニズムを備えています。
- 接続プール管理を実装しています。
適用シナリオ
- SQLステートメントを直接使用する必要があるシナリオ
- パフォーマンス要件が高いシナリオ
- 簡単なデータベース操作のシナリオ
前提条件
OB Cloudデータベースアカウントに登録し、クラスタインスタンスとMySQL互換モードのテナントを作成していること。詳細については、クラスタインスタンスの作成およびテナントの作成をご参照ください。
JDK 1.8とMavenをインストール済みであること。
Eclipseをインストール済みであること。
説明
このドキュメントでコードを実行するために使用されているツールは、Eclipse IDE for Java Developers 2022-03バージョンです。個人の好みに応じて、適したツールを選択してサンプルコードを実行することもできます。
操作手順
説明
本記事で示す操作手順は、Windows環境でEclipse IDE for Java Developers 2022-03を使用してこのプロジェクトをコンパイルおよび実行する場合のものです。他のOS環境やコンパイラを使用する場合は、操作手順が若干異なる可能性があります。
spring-jdbc-mysql-clientプロジェクトをEclipseにインポートします。- OB CloudデータベースのURLを取得します。
spring-jdbc-mysql-clientプロジェクト内のデータベース接続情報を変更します。spring-jdbc-mysql-clientプロジェクトを実行します。
ステップ1:spring-jdbc-mysql-clientプロジェクトをEclipseにインポートする
Eclipseを開き、メニューバーからFile->Open Projects from File Systemを選択します。
ポップアップダイアログで、Directoryボタンをクリックしてプロジェクトのディレクトリを選択し、Finishをクリックしてインポートを完了します。
説明
Eclipseを使用してMavenプロジェクトをインポートすると、プロジェクト内の
pom.xmlファイルを自動的に検出し、その記述に基づいて必要な依存ライブラリをダウンロードしてプロジェクトに追加します。
プロジェクトの状況を確認します。

ステップ2:OB CloudデータベースのURLを取得する
OB Cloudコンソールにログインします。インスタンス一覧ページで、対象インスタンスの情報を展開し、対象テナントで、接続 > **接続文字列を取得**を選択します。
詳細な操作については、接続文字列の取得をご参照ください。
作成済みのOB Cloudデータベースに基づいて、以下のURLの該当する情報を入力します。
jdbc:mysql://$host:$port/$database_name?user=$user_name&password=$password&useSSL=falseパラメータの説明:
$host:OB Cloudデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OB Cloudデータベースの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベース名を指定します。注意
テナントに接続するアカウントは、データベースに対する
CREATE、INSERT、UPDATE、DELETE、SELECT、DROP権限が付与されていなければなりません。アカウント権限の詳細については、アカウントの作成と管理をご参照ください。$user_name:データベースへのアクセスアカウント。$password:アカウントのパスワード。
MySQL Connector/J接続プロパティの詳細については、Configuration Propertiesをご参照ください。
例:
jdbc:mysql://t********.********.oceanbase.cloud:3306/test?user=mysql001&password=******&useSSL=false
ステップ3:spring-jdbc-mysql-clientプロジェクトのデータベース接続情報を修正する
ステップ2:OB CloudクラウドデータベースのURLを取得するで取得した情報に基づいて、ファイルspring-jdbc-mysql-client/src/main/java/com/example/Main.java内のデータベース接続情報を修正します。

例:
- OB Cloudクラウドデータベースの接続アドレスは
t5******.********.oceanbase.cloudです。 - アクセスポートは3306を使用します。
- アクセスするデータベース名は
testです。 - テナントの接続アカウントは
mysql001です。 - パスワードは
******です。
コード:
...
String url = "t********.********.oceanbase.cloud:3306/test?useSSL=false";
String username = "mysql001";
String password = "******";
...
ステップ4:spring-jdbc-mysql-clientプロジェクトを実行する
プロジェクトナビゲータービューで、src/main/javaディレクトリを見つけて展開します。
Main.javaファイルを右クリックし、Run As->Java Applicationを選択します。

Eclipseのコンソールウィンドウで出力結果を確認します。

よくある質問
1. 接続タイムアウト
接続タイムアウトの問題が発生した場合は、JDBC URLに接続タイムアウトパラメータを設定できます。
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000
2. 文字セットの問題
正しい文字エンコーディングを確保するために、JDBC URLに正しい文字セットパラメータを設定します。
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true
3. SSL接続
OB CloudデータベースとのSSL接続を有効にするには、JDBC URLに以下のパラメータを追加します。
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true
4. アカウントパスワードの特殊文字
ユーザー名やパスワードに特殊文字(例:#)が含まれている場合は、URLエンコードが必要です。
String encodedPassword = URLEncoder.encode(password, "UTF-8");
注意
MySQL Connector/J 8.xを使用する場合は、アカウントのパスワードにシャープ記号(#)が含まれないようにしてください。含まれていると、接続エラーが発生する可能性があります。
プロジェクトコードについて
spring-jdbc-mysql-client をクリックしてプロジェクトコードをダウンロードします。これは、spring-jdbc-mysql-client.zip という名前の圧縮ファイルです。
解凍すると、spring-jdbc-mysql-client という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
spring-jdbc-mysql-client
├── src
│ └── main
│ └── java
│ └── com
│ └── example
│ └── Main.java
└── pom.xml
ファイルの説明:
src:ソースコードのルートディレクトリです。main:アプリケーションの主要なロジックを含むメインコードディレクトリです。java:Javaソースコードディレクトリです。com:Javaパッケージディレクトリです。example:サンプルプロジェクトのパッケージディレクトリです。Main.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>を使用して、プロジェクトの名前をspring-jdbc-mysql-clientと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。
コード:
<groupId>com.example</groupId> <artifactId>spring-jdbc-mysql-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>プロジェクトが依存するコンポーネントを設定します。
データベースとのやり取りを行うために、
mysql-connector-java依存ライブラリを追加します:説明
このセクションのコードは、プロジェクトが依存するコンポーネントがMySQL Connector/JのV5.1.40バージョンであることを定義しています。他のバージョンの情報については、MySQL Connector/Jをご参照ください。
<groupId>を使用して、依存関係の所属組織をmysqlと指定します。<artifactId>を使用して、依存関係の名前をmysql-connector-javaと指定します。<version>を使用して、依存関係のバージョン番号を5.1.40と指定します。
コード:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>spring-jdbc依存ライブラリを追加します:<groupId>を使用して、依存関係の所属組織をorg.springframeworkと指定します。<artifactId>を使用して、依存関係の名前をspring-jdbcと指定します。<version>を使用して、依存関係のバージョン番号を5.2.0.RELEASEと指定します。
コード:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </dependency>
Main.javaコードの紹介
Main.java ファイルはサンプルプログラムの一部であり、Spring JDBCフレームワークを使用してデータベース操作を実行する方法を示すコードです。まずデータベース接続情報を設定し、次に JdbcTemplate オブジェクトを作成してデータベース操作を実行します。コードには、テーブルの作成、データの挿入、データのクエリの例も含まれています。
本記事の Main.java ファイルのコードは、主に以下の部分で構成されています:
パッケージの定義と必要なクラスのインポート。
- 現在のコードが属するパッケージ名を
com.exampleと宣言します。 JdbcTemplateクラスをインポートします。これはSpring JDBCフレームワークのコアクラスで、データベース操作の実行に使用されます。DriverManagerDataSourceクラスをインポートします。これはSpringが提供するDataSourceインターフェースを実装したデータソースクラスで、データベース接続情報の設定に使用されます。
コード:
package com.example; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource;- 現在のコードが属するパッケージ名を
Mainクラスを作成し、mainメソッドを定義します。- プログラムのエントリポイントとして、
Mainという名前のpublicクラスを定義します。クラス名はファイル名と一致させる必要があります。 - プログラムの実行開始点として、public staticメソッド
mainを定義します。 - その他のデータベース操作。
コード:
public class Main { public static void main(String[] args) { // データベース接続情報 // データソースの作成 // JdbcTemplateオブジェクトの作成 // テーブルの作成 // データの挿入 // データの更新 // データの削除 // データのクエリ // テーブルの削除 } }- プログラムのエントリポイントとして、
データベース接続情報を定義します。
データベースに接続するためのURL、ユーザー名、パスワードを定義します。
$host、$port、$database_name、$user_name、$passwordは実際のデータベース接続情報に置き換える必要があります。コード:
String url = "jdbc:mysql://$host:$port/$database_name?useSSL=false"; String username = "$user_name"; String password = "$password";パラメータの説明:
$host:OB Cloudデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。$port:OB Cloudデータベースの接続ポートを指定します。デフォルトは3306です。$database_name:アクセスするデータベースの名前です。$user_name:データベースにアクセスするためのアカウントです。$password:アカウントのパスワードです。
データソースを作成します。
DriverManagerDataSourceオブジェクトを作成し、ドライバークラス名、データベースURL、ユーザー名、パスワードなどのデータベース接続に関する情報を設定します。具体的な手順は以下のとおりです:- データベース接続情報を設定するために、
DriverManagerDataSourceオブジェクトを作成します。 - ドライバークラス名の設定:
setDriverClassNameメソッドを呼び出して、データベースドライバーのクラス名をcom.mysql.jdbc.Driverに設定します。 - データベースURLの設定:
setUrlメソッドを呼び出して、データベースのURLを設定します。 - ユーザー名の設定:
setUsernameメソッドを呼び出して、データベースのユーザー名を設定します。 - パスワードの設定:
setPasswordメソッドを呼び出して、データベースのパスワードを設定します。
コード:
DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password);- データベース接続情報を設定するために、
JdbcTemplateオブジェクトを作成します。JdbcTemplateオブジェクトを作成します。これはSpring JDBCフレームワークのコアクラスの一つです。JdbcTemplateは、SQLステートメントの実行、データの更新、データのクエリなど、データベース操作を実行するメソッドを提供します。コード:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);テーブルを作成します。
- テーブル作成用のSQLステートメントを定義します。SQLステートメントでテーブル名を
test_springjdbcと指定し、idという名前のINT型列と、nameという名前のVARCHAR(20)型列の2つの列を定義します。 - テーブル作成用のSQLステートメントを実行します。
jdbcTemplateオブジェクトはexecuteメソッドを呼び出して、上記で定義したテーブル作成用のSQLステートメントを実行します。 - コンソールにテーブル作成成功のメッセージを出力します。
コード:
String createTableSql = "CREATE TABLE test_springjdbc (id INT, name VARCHAR(20))"; jdbcTemplate.execute(createTableSql); System.out.println("Create table successfully.");- テーブル作成用のSQLステートメントを定義します。SQLステートメントでテーブル名を
データを挿入します。
- データ挿入用のSQLステートメントを定義します。SQLステートメントで挿入対象のテーブルを
test_springjdbc、列をidとnameと指定し、(1,'A1')、(2,'A2')、(3,'A3')の2行のデータを挿入します。 - データ挿入用のSQLステートメントを実行します。
jdbcTemplateオブジェクトはupdateメソッドを呼び出して、上記で定義したデータ挿入用のSQLステートメントを実行します。 - コンソールにデータ挿入成功のメッセージを出力します。
コード:
String insertDataSql = "INSERT INTO test_springjdbc (id,name) VALUES (1,'A1'), (2,'A2'), (3,'A3')"; jdbcTemplate.update(insertDataSql); System.out.println("Insert data successfully.");- データ挿入用のSQLステートメントを定義します。SQLステートメントで挿入対象のテーブルを
データを更新します。
- SQLステートメントを定義し、データベーステーブル
test_springjdbcのidが1のレコードのnameフィールドの値をA11に更新します。 jdbcTemplateオブジェクトを使用してSQLステートメントを実行し、データベースに更新操作を適用します。- コンソールにデータ更新成功のメッセージを出力します。
コード:
String updateDataSql = "UPDATE test_springjdbc SET name = 'A11' WHERE id = 1"; jdbcTemplate.update(updateDataSql); System.out.println("Update data successfully.");- SQLステートメントを定義し、データベーステーブル
データを削除します。
- SQLステートメントを定義し、データベーステーブル
test_springjdbcからidが2のレコードを削除します。 jdbcTemplateオブジェクトを使用してSQLステートメントを実行し、データベースに削除操作を適用します。- コンソールにデータ削除成功のメッセージを出力します。
コード:
String deleteDataSql = "DELETE FROM test_springjdbc WHERE id = 2"; jdbcTemplate.update(deleteDataSql); System.out.println("Delete data successfully.");- SQLステートメントを定義し、データベーステーブル
データをクエリします。
データをクエリするSQLステートメントを定義します。SQLステートメントでは
SELECT *を使用してすべての列を選択し、test_springjdbcテーブルからデータをクエリします。データをクエリするSQLステートメントを実行します。
jdbcTemplateオブジェクトはqueryメソッドを呼び出して上記で定義したデータをクエリするSQLステートメントを実行し、パラメータとしてコールバック関数を受け取ります。コールバック関数内のコードは、
ResultSetオブジェクト(rs)を使用してクエリ結果の各行データを取得し、処理を行います。コールバック関数はgetIntおよびgetStringメソッドを使用してResultSetオブジェクトからid列とname列の値を取得し、コンソールに出力します。最後に、コールバック関数はnullを返します。コンソールにデータクエリ成功のメッセージを出力します。
**コード:**
```java
String selectDataSql = "SELECT * FROM test_springjdbc";
jdbcTemplate.query(selectDataSql, (rs, rowNum) -> {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + ", name: " + name);
return null;
});
System.out.println("Query data successfully.");
```
テーブルを削除します。
データベース内のテーブル
test_springjdbcを削除するSQLステートメントを定義します。jdbcTemplateオブジェクトを使用してSQLステートメントを実行し、データベースにテーブル削除操作を適用します。テーブル削除成功のメッセージを出力します。
**コード:**
```java
String deleteTableSql = "DROP TABLE test_springjdbc";
jdbcTemplate.execute(deleteTableSql);
System.out.println("Table drop successfully.");
```
全コード表示
<?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>spring-jdbc-mysql-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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
</project>
package com.example;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Main {
public static void main(String[] args) {
// Database Connect Information
String url = "jdbc:mysql://$host:$port/$database_name?useSSL=false";
String username = "$user_name";
String password = "$password";
// create data source
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// Create a JdbcTemplate object
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// Create table
String createTableSql = "CREATE TABLE test_springjdbc (id INT, name VARCHAR(20))";
jdbcTemplate.execute(createTableSql);
System.out.println("Create table successfully.");
// Insert data
String insertDataSql = "INSERT INTO test_springjdbc (id,name) VALUES (1,'A1'), (2,'A2'), (3,'A3')";
jdbcTemplate.update(insertDataSql);
System.out.println("Insert data successfully.");
// Update data
String updateDataSql = "UPDATE test_springjdbc SET name = 'A11' WHERE id = 1";
jdbcTemplate.update(updateDataSql);
System.out.println("Update data successfully.");
// Delete data
String deleteDataSql = "DELETE FROM test_springjdbc WHERE id = 2";
jdbcTemplate.update(deleteDataSql);
System.out.println("Delete data successfully.");
// Query data
String selectDataSql = "SELECT * FROM test_springjdbc";
jdbcTemplate.query(selectDataSql, (rs, rowNum) -> {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + ", name: " + name);
return null;
});
System.out.println("Query data successfully.");
// Delete table
String deleteTableSql = "DROP TABLE test_springjdbc";
jdbcTemplate.execute(deleteTableSql);
System.out.println("Table drop successfully.");
}
}
ベストプラクティス
トランザクション管理
@Transactional
public void transferMoney(String fromAccount, String toAccount, BigDecimal amount) {
// トランザクション操作
}
関連ドキュメント
MySQL Connector/Jの詳細については、Overview of MySQL Connector/Jをご参照ください。
クリックしてspring-jdbc-mysql-clientサンプルプロジェクトをダウンロード
Spring JDBCによるOceanBaseデータベース接続サンプルプログラム(MySQLモード)