Skip to content

元ドキュメント: 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

接続パラメータ

パラメータ説明推奨値
useSSLSSL 接続の使用true
characterEncoding文字エンコーディングutf8mb4
useUnicodeUnicode の使用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 構文の使用を推奨します。
  • 本番環境ではパスワード等の機密情報をソースコードにハードコーディングしないでください。環境変数や設定管理サービスの利用を推奨します。

Tencent Cloud プロダクトドキュメント