JavaでMySQLデータベースに接続する方法 (JDBC)
[履歴] [最終更新] (2016/03/13 18:54:39)

概要

JDBC (Java Database Connectivity) は、MySQLやPostgreSQLといった数々のSQLデータベース、あるいはスプレッドシートなどのデータファイルにJavaからアクセスするためのAPIです。アクセス先ごとに専用のドライバが提供されているため、事前にインストールしておく必要があります。ここではMySQLへの接続を例に取り、基本的なサンプルプログラムを紹介します。

JDBCドライバのインストール

ダウンロード

まず、MySQLのダウンロードページにアクセスします。そのページ内にある、"MySQL Connectors" というリンクをクリックすると、MySQLのドライバ一覧が表示されます。ここではJavaのJDBCドライバが必要ですので、"Connector/J" をクリックします。表示されたダウンロードページのプルダウンから "Platform Independent" を選択し、zipまたはtarのいずれかをダウンロードおよび解凍してください。

インストール

解凍したフォルダを適当な場所、例えば "C:\Program Files\Java" 内に移動させ、環境変数CLASSPATHにjarファイル "mysql-connector-java-5.1.31-bin.jar" (ダウンロードしたバージョンによってファイル名は若干異なります) へのパス (例: "C:\Program Files\Java\mysql-connector-java-5.1.31\mysql-connector-java-5.1.31-bin.jar") をセミコロン区切りで追加することで、インストールが完了します。

SQLクエリを実行するサンプルプログラム

jdbc_sample.java

import java.sql.*;

class JdbcSample {
    public static void main (String[] args) {
        try {
            // 先程インストールしたMySQLのドライバを指定
            Class.forName("com.mysql.jdbc.Driver");

            // MySQLデータベースに接続 (DB名,ID,パスワードを指定)
            Connection conn =
                DriverManager.getConnection("jdbc:mysql://localhost/YOUR_DBNAME?"+
                                            "user=USER_ID&password=PASSWORD");
            // ステートメントを作成
            Statement stmt = conn.createStatement();

            // INSERT
            stmt.executeUpdate("INSERT INTO users (id, email) VALUES (1001,'someone01@example.com')");
            stmt.executeUpdate("INSERT INTO users (id, email) VALUES (1002,'someone02@example.com')");

            // DELETE
            stmt.executeUpdate("DELETE FROM users where id=1001");

            // UPDATE
            stmt.executeUpdate("UPDATE users SET email='updated@example.com' where id=1002");

            // SELECT
            ResultSet rset = stmt.executeQuery("SELECT id, email FROM users");
            while ( rset.next() ) {
                System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); // ()内は列番号です
            }

            // 結果セットをクローズ
            rset.close();
            // ステートメントをクローズ
            stmt.close();
            // 接続をクローズ
            conn.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

実行結果例

$ javac -encoding utf-8 jdbc_sample.java && java JdbcSample
1002    updated@example.com

(javaソースファイルがutf-8で保存されている場合でかつ環境設定がutf-8でない場合は、"-encoding utf-8" でエンコーディングを明記する必要があります)

関連ページ
    概要 MyBatis は、こちらのページに記載の JDBC を直接利用せずに、XML ファイル等で用意した SQL 文を利用して DB にアクセスするための Java ライブラリです。内部的には JDBC が利用されているため、JDBC のインストールは必要です。同様のライブラリに Hibernate ORM があります。DB は特に MySQL を対象として、MyBatis バージョン 3 の
    概要 AWS Glue を利用すると Apache Spark をサーバーレスに実行できます。基本的な使い方を把握する目的で、S3 と RDS からデータを Redshift に ETL (Extract, Transform, and Load) してみます。2017/12/22 に東京リージョンでも利用できるようになりました
    概要 Spring フレームワークにおける @Transactional アノテーションを利用すると DB トランザクション処理が簡単に設定できます。ここでは特に、こちらのページで環境構築した Spring Boot から MyBatis を経由して MySQL を利用する場合を対象としますが、JDBC を利用して他の DB を操作する場合も考え方は同じです。