Javaプログラムではデータベースとのやり取りが必須と言っても過言ではないほど頻繁に利用されます。
本記事では、Javaプログラムと人気データベースMySQLを「JDBCドライバ」を利用して接続する方法について解説していきたいと思います。
尚、本記事での開発環境はMAC環境を想定しているため、Windowsユーザーの方は適宜読み替えて実施してみてください。
目次
MySQLとの連携に必要なJDBCドライバをダウンロードしよう
まずはMySQLの公式ページからJDBCのコネクタをダウンロードします。
MAC環境用のJDBCは表示されていないけど大丈夫!
「JDBC Driver for MySQL (Connector/J)」がMySQL用のJDBCとなりますので「ダウンロード」をクリックします。
次の画面で「Select Operating System」とご自身の開発環境を選択する必要があるのですが「MAC OS」の表記がありません。
MAC OSの場合は、「Platform Independent」を選択しましょう。
ダウンロードファイルは「TAR」と「ZIP」から選択することが可能で、どちらでも良いのですが今回は「ZIP」を選択してダウンロードしてみます。
「ダウンロード」ボタンをクリックすると下記のような画面でMySQLのアカウントにログインもしくは登録するかを確認されます。
必要ない場合は赤枠で囲んだ「No thanks, just start my download」をクリックしてください。
ダウンロードしたファイルを解凍してみよう
ダウンロードが完了すると「mysql-connector-java-8.0.19.zip」のような名称のファイルが確認出来ます。
圧縮ファイルを解凍すると様々なファイルが確認出来ますが、重要なファイルとなるのが「mysql-connector-java-8.0.19.jar」です。
今回は解凍したjarファイルを「/Users/ユーザー名/Desktop/jdbc」に格納した状態で以下のサンプルコードを実行していきたいと思います。
MySQLにJDBCで接続するJavaのサンプルソースコードを確認しよう
JavaプログラムからMySQLに接続するために必要なJDBCファイルをダウンロード出来たので、実際にJavaのサンプルプログラムを作成していきたいと思います。
データを取得するためのMySQLデータ
今回のサンプルではJavaプログラムから取得するデータとして、「sample_db」データベースに「user」テーブルを作成しています。
「user」テーブルに格納されているデータは下記の通りとなります。
+------+---------------+ | id | name | +------+---------------+ | 1 | ポテパン1 | | 2 | ポテパン2 | | 3 | ポテパン3 | +------+---------------+
MySQLに接続するJavaプログラムを作成しよう
今回のJavaプログラムではターミナルからコンパイル・実行することを前提に、MySQLのユーザー名は「root」パスワード「設定なし」の状態でJavaプログラムとMySQLを接続するサンプルコードをご紹介したいと思います。
Main.java
import java.io.*; import java.sql.*; public class Main { public static void main(String[] args) throws Exception { Connection con = null; try { con = DriverManager.getConnection("jdbc:mysql://localhost/sample_db", "root", ""); Statement st = con.createStatement(); String sql = "select * from user;"; ResultSet result = st.executeQuery(sql); while(result.next()) { int id = result.getInt("id"); String name = result.getString("name"); System.out.println("id = " + id); System.out.println("name = " + name); } } catch (SQLException ex) { System.out.println("MySQLへの接続に失敗しました。"); } finally { if(con != null) { con.close(); } } } }
ソースコードの内容について解説
上記のサンプルコードの内容について重要なポイントを解説していきたいと思います。
コネクションの初期化と取得
まず「データベースコネクションの初期化」と「コネクションの取得」を実施しているのが下記のコードとなります。
「DriverManager」クラスの「getConnection」メソッドでは第一引数に「データベースを表すURL」、第二引数に「データベースのユーザー名」、第三引数に「データベースユーザーのパスワード」を設定します。
Connection con = null; con = DriverManager.getConnection("jdbc:mysql://localhost/sample_db", "root", "");
データベースを表すURLは下記のような構成となっており、今回のサンプルでは「localhost」サーバーで起動し、「sample_db」という名前のデータベースを指定していることになります。
jdbc:mysql://サーバー名/データベース名
SQL文の作成
データベースのコネクションを確立した後、SQL文を組み立て実行しているのが下記のコードとなります。
Statement st = con.createStatement(); String sql = "select * from user;"; ResultSet result = st.executeQuery(sql);
「Connection」インターフェースの「createStatement」メソッドを使用し、データベースにSQL文を送るためのオブジェクトを作成します。
実際に実行するのは、「Statement」インターフェースの「executeQuery」メソッドとなり、引数に指定したSQL文が実行されます。
取得した結果はResultSetインターフェースのオブジェクトに格納されます。
SQLで取得した結果をJavaプログラムで利用する
MySQLから取得したデータを利用するためには「ResultSet」インターフェースが持つ、「カーソル」という概念を利用します。
while(result.next()) { int id = result.getInt("id"); String name = result.getString("name"); System.out.println("id = " + id); System.out.println("name = " + name); }
カーソルの概念では、取得したデータを1行ずつ先頭行から順にカーソルを動かしながら、データを全て取得し終えるまで繰り返す方法となります。
実際にどのように行うかというと、上記サンプルのように「ResultSet」インターフェースの「next」メソッドを利用します。
while文で繰り返し処理を行いながらJavaプログラムでカラム名から値を取得し、コンソールに表示するサンプルとなっています。
作成したJavaプログラムを実行してMySQLからデータが取得出来ているか確認しよう
では実際に作成したJavaプログラムを実行してデータを取得してみましょう。
筆者の環境では「/User/ユーザー名/Document/sample」配下に「Main.java」を格納しています。
コマンドを実行する際は、「/User/ユーザー名/Document/sample」フォルダに移動した上でコンパイルを実行しています。
javac -cp /Users/xxx/Desktop/jdbc/mysql-connector-java-8.0.19.jar: Main.java
上記のコマンドでJavaファイルのコンパイルを実行しています。
「-cp」オプションでJDBC接続用のjarファイルを指定していることがご確認頂けます。
生成されたクラスファイルを指定して実行します。
java -cp /Users/xxx/Desktop/jdbc/mysql-connector-java-8.0.19.jar: Main
クラスファイルを実行する際、コンパイル時と同様に「-cp」オプションでJDBC接続用のjarファイルを指定する必要があります。
実行した結果が下記の通りとなります。
id = 1 name = ポテパン1 id = 2 name = ポテパン2 id = 3 name = ポテパン3
Javaファイルで指定した通り、MySQLから「user」テーブルのデータを取得していることがご確認頂けます。
さいごに:JDBCドライバを利用したMySQLとJavaプログラムの連携の基本を抑えよう
本記事では、MAC環境でのJavaプログラムとMySQLの連携について、JDBCドライバのインストールから基本的な設定方法と使い方をご紹介してきました。
今回ご紹介した内容は、最も基本的なターミナルからの設定方法となり、IDEを利用する場合でも解凍したJREの格納場所などをIDEに合わせて設定する必要がありますが、基本的な考え方やJavaプログラムでのコードの記述方法は同じです。
JavaプログラムでMySQLと連携するシステムは数多く存在するため、JDBCを利用した基本的な考え方を理解した上で実務に役立ててみてください。
記事執筆時点のJDBCドライババージョンです。ダウンロードするタイミングによりファイル名称は異なります。