26.

データベース接続

編集

JavaのDB接続の記事です。JDBC(Java Database Connectivity)という標準APIを通じて、MySQL/PostgreSQL/Oracle/SQL Server等の各種RDBに接続できます。

JDBC接続の基本

JavaではJDBC APIがDB接続の標準。各DBベンダーが提供するJDBCドライバ(jarファイル)をクラスパスに追加し、共通のAPIで操作します。

必要なもの

DBJDBCドライバ
MySQL / MariaDBmysql-connector-j、mariadb-java-client
PostgreSQLpostgresql
Oracleojdbc
SQL Servermssql-jdbc
DB2db2jcc4
SQLitesqlite-jdbc

JDBC URLの形式

DBJDBC URL例
MySQLjdbc:mysql://localhost:3306/mydb?useSSL=false
PostgreSQLjdbc:postgresql://localhost:5432/mydb
Oraclejdbc:oracle:thin:@localhost:1521:ORCL
SQL Serverjdbc:sqlserver://localhost:1433;databaseName=mydb
SQLitejdbc:sqlite:/path/to/db.sqlite

最小のJDBC接続コード

import java.sql.*;

public class DbExample {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String user = "myuser";
        String pass = "secret";

        try (Connection conn = DriverManager.getConnection(url, user, pass);
             PreparedStatement ps = conn.prepareStatement(
                  "SELECT id, name FROM users WHERE id = ?")) {
            ps.setInt(1, 1);
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    System.out.println(rs.getString("name"));
                }
            }
        }
    }
}

主要なJDBCクラス

クラス/インターフェース役割
DriverManager接続管理
Connection1つのDB接続
Statement静的SQL(非推奨。SQLi対策弱い)
PreparedStatementパラメータ化SQL(推奨)
CallableStatementストアドプロシージャ呼び出し
ResultSetSELECT結果セット
DataSource接続プール経由の取得(本番推奨)

INSERT/UPDATE/DELETEの例

try (PreparedStatement ps = conn.prepareStatement(
        "INSERT INTO users (name, email) VALUES (?, ?)")) {
    ps.setString(1, "Taro");
    ps.setString(2, "taro@example.com");
    int affected = ps.executeUpdate();
    System.out.println("inserted rows: " + affected);
}

トランザクション

conn.setAutoCommit(false);
try {
    // 複数SQL実行
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
    throw e;
} finally {
    conn.setAutoCommit(true);
}

本番運用の標準

  • 接続プール: HikariCP、Apache DBCP、c3p0 等で接続を再利用
  • DataSource: DriverManagerではなくJNDI/Springから注入
  • ORM: 直接JDBCを書くよりJPA / MyBatis / jOOQ等を使うことが多い

セキュリティの基本

  • 必ず PreparedStatementを使う。SQLインジェクション対策
  • パスワードをコードにハードコードしない(.env / Secrets Manager等)
  • DBユーザーは必要最小権限
  • 本番ではSSL接続を強制(useSSL=true&requireSSL=true 等)

注意点

  • リソースは必ずclose: try-with-resources を使うのが安全
  • Statement vs PreparedStatement: 後者を常に使う(性能・セキュリティ両面で)
  • 古い Class.forName("com.mysql.jdbc.Driver") はJDBC 4.0以降不要

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 基本的なルール
  2. データ型
  3. 変数
  4. 定数
  5. 配列
  6. コレクション(List,Set,Queue)
  7. Map(連想配列)
  8. 演算子
  9. 条件分岐
  10. 繰り返し制御文
  11. クラス
  12. メソッド
  13. インスタンス化
  14. コンストラクタ
  15. staticキーワード
  16. オーバーロード
  17. 継承
  18. オーバーライド
  19. this
  20. super
  21. パッケージ
  22. アクセス修飾子
  23. 抽象クラス・メソッド
  24. インターフェース
  25. カプセル化
  26. データベース接続
  27. セッション
  28. ファイル入出力
  29. ラムダ式