元ドキュメント: JDBC 接続サンプル
JDBC 接続サンプル
概要
本ドキュメントでは、Java JDBC を使用して TDSQL Boundless に接続し、基本的な CRUD 操作を行う方法について説明します。
前提条件
- Java 8 以降がインストールされていること
- MySQL Connector/J 8.0 以降のドライバーが利用可能であること
ドライバーの設定
Maven の場合
pom.xml に以下の依存関係を追加します。
xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>Gradle の場合
groovy
implementation 'mysql:mysql-connector-java:8.0.33'接続文字列
jdbc:mysql://<ホスト>:<ポート>/<データベース名>?useSSL=true&characterEncoding=utf8mb4&useUnicode=true接続パラメータ
| パラメータ | 説明 | 推奨値 |
|---|---|---|
useSSL | SSL 接続の使用 | true |
characterEncoding | 文字エンコーディング | utf8mb4 |
useUnicode | Unicode の使用 | true |
serverTimezone | サーバーのタイムゾーン | Asia/Tokyo |
connectTimeout | 接続タイムアウト(ミリ秒) | 5000 |
socketTimeout | ソケットタイムアウト(ミリ秒) | 30000 |
接続サンプルコード
基本的な接続
java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TDSQLConnection {
private static final String URL = "jdbc:mysql://your-host:3306/your_database"
+ "?useSSL=true&characterEncoding=utf8mb4&useUnicode=true";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void main(String[] args) {
try (Connection conn = getConnection()) {
System.out.println("接続に成功しました。");
System.out.println("データベース製品名: " + conn.getMetaData().getDatabaseProductName());
} catch (SQLException e) {
System.err.println("接続に失敗しました: " + e.getMessage());
e.printStackTrace();
}
}
}データの挿入(INSERT)
java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertExample {
public static void insertUser(Connection conn, String name, String email) throws SQLException {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setString(2, email);
int rows = pstmt.executeUpdate();
System.out.println(rows + " 件のレコードを挿入しました。");
}
}
}データの取得(SELECT)
java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelectExample {
public static void selectUsers(Connection conn) throws SQLException {
String sql = "SELECT id, name, email FROM users WHERE name = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, "田中太郎");
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
System.out.printf("ID: %d, 名前: %s, メール: %s%n",
rs.getLong("id"),
rs.getString("name"),
rs.getString("email"));
}
}
}
}
}データの更新(UPDATE)
java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UpdateExample {
public static void updateEmail(Connection conn, long userId, String newEmail) throws SQLException {
String sql = "UPDATE users SET email = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, newEmail);
pstmt.setLong(2, userId);
int rows = pstmt.executeUpdate();
System.out.println(rows + " 件のレコードを更新しました。");
}
}
}データの削除(DELETE)
java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteExample {
public static void deleteUser(Connection conn, long userId) throws SQLException {
String sql = "DELETE FROM users WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setLong(1, userId);
int rows = pstmt.executeUpdate();
System.out.println(rows + " 件のレコードを削除しました。");
}
}
}コネクションプールの使用
本番環境では、コネクションプールの使用を推奨します。以下は HikariCP を使用した例です。
java
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
public class ConnectionPoolExample {
public static DataSource createDataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://your-host:3306/your_database"
+ "?useSSL=true&characterEncoding=utf8mb4&useUnicode=true");
config.setUsername("your_username");
config.setPassword("your_password");
config.setMaximumPoolSize(10);
config.setMinimumIdle(5);
config.setConnectionTimeout(5000);
config.setIdleTimeout(300000);
return new HikariDataSource(config);
}
}注意事項
- すべてのユーザー入力に対して必ずプリペアドステートメント(パラメータバインディング)を使用してください。SQL インジェクション対策として必須です。
- 接続後は必ずリソースを解放してください。try-with-resources 構文の使用を推奨します。
- 本番環境ではパスワード等の機密情報をソースコードにハードコーディングしないでください。環境変数や設定管理サービスの利用を推奨します。