Javaでのシステム開発において、データベースとのやり取りは必須と呼べるほど利用頻度の高い処理です。
本記事では、Javaでのデータベース接続を基本であるJDBCを使った方法で解説していきます。
Javaでデータベースを扱う事前準備
Javaプログラムでデータベースとのやり取りを行う前に、今回サンプルで利用する環境について解説していきます。
様々なデータベースが提供されており、接続方法も複数ありますが今回は無料で利用可能な基本となるパターンについてご紹介していきます。
データベース
データベースには、OracleやMicrosoft SQL Serverをはじめ、様々なデータベースが提供されていますが、今回は無料で利用可能なオープンソースのデータベース「MySQL」を利用していきます。
MySQLのダウンロードページから、ご自身の環境に合わせたダウンロードファイルを取得して、インストールしてください。
画像のようにログイン画面が表示されますが、ダウンロードするだけであれば赤枠の「No thanks, just start my download.」をクリックすればダウンロード可能です。
インストール自体はダブルクリックでdmgファイルを開き、画面の手順に沿って簡単に行うことが出来ます。
ドライバ
Javaでデータベース接続を行う際によく利用されるのが「JDBC」と呼ばれるシステムで、データベース毎の違いを吸収しJavaのソースコードを極力変更せずに様々なデータベースに切り替えることが可能となります。
今回はMySQLをデータベースとして利用しますので、MySQL用のJDBCドライバをダウンロードして利用します。
MySQLサイトで、JDBCのダウンロードページにアクセスし、「Connector/J」を選択します。
次の画面で、ご利用環境のOSを選択しダウンロードを行います。
Mac環境の方は「Platform Independent」を選択しておきましょう。
「TAR」と「ZIP」どちらかの形式で「Download」ボタンをクリックします。
サンプルでは「ZIP」ファイルをダウンロードしました。
ZIPファイルを解凍すると「mysql-connector-java-8.0.27.jar」のようなjarファイルが格納されており、このjarファイルを設定してデータベースとの接続を行います。
データベース接続を行うJavaサンプル
データベース接続を行うためのJavaのサンプルコードと用意したデータベースで実際の使い方を確認していきましょう。
データベース
サンプルではMySQLに「potepan」の名前でデータベースを作成し、「users」テーブルを定義しました。
「users」テーブルにはサンプルデータとして下記データを格納しています。
mysql> select * from users; +------+-----------------+ | id | name | +------+-----------------+ | 1 | 山田たろう | | 2 | 佐藤あきら | +------+-----------------+
JDBCドライバをビルドパスに設定
事前準備でダウンロードしたJDBCドライバをEclipseからJavaプログラムが認識出来るようにしてあげる必要があります。
プロジェクトを右クリックして「ビルド・パス」から「外部アーカイブの追加」を選択します。
配置したjarファイルを選択して「Open」ボタンをクリックします。
サンプルではデスクトップに「mysql」というフォルダを配置して格納しました。
参照ライブラリーとして指定したjarファイルが表示されていることが分かります。
サンプルコード
実際にJavaからMySQLに接続してデータを取得するサンプルコードが下記です。
package sample; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { public static void main(String[] args) { Connection con = null; try { con = DriverManager.getConnection("jdbc:mysql://localhost/potepan", "root", "パスワード"); Statement st = con.createStatement(); String sql = "select * from users;"; 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); } if(con != null) { con.close(); } } catch (SQLException ex) { System.out.println("接続に失敗しました。"); } } }
実行結果が下記です。
id: 1 name: 山田たろう id: 2 name: 佐藤あきら
コード解説
サンプルコードでデータベース接続に関する抑えておきたい部分を確認しておきましょう。
データベース接続
14行目のコードが実際にデータベースに接続するためのコードになります。
con = DriverManager.getConnection("jdbc:mysql://localhost/potepan", "root", "パスワード");
ローカルの「potepan」データベースに対して、「root」ユーザーで接続を確立しています。
15行目のコードに関しては、SQLを実行するためにStatementオブジェクトを生成する必要があるんだと決まりごととして覚えておきます。
SQL発行
16行目で記述したSQL文を17行目の「executeQuery」メソッドで実行します。
String sql = "select * from users;"; ResultSet result = st.executeQuery(sql);
SQL文に関しては文字列で記述しているだけなので、引数にそのまま書いても構いませんが、長いSQL文になると可読性も悪くなるため一度変数に格納するのが一般的です。
SQLで取得したデータはResultSetのオブジェクトに格納されます。
データ操作
取得したデータを操作しているのが19~24行目の処理です。
取得したデータは複数件存在する可能性があるためwhile文で1レコードずつ抽出し、サンプルでは文字列加工してコンソールに出力しています。
コネクションの切断
25~27行目に記述しているのが、データベースとのコネクションを切断する処理です。
if(con != null) { con.close(); }
コネクションのオブジェクトが存在する場合に、明示的にclose処理を呼び出して切断しています。
さいごに: Java開発でのデータベース接続は頻出処理
本記事では、Javaでデータベースへ接続する方法についてサンプルコードを掲載しながらご紹介してきました。
データベース接続は頻出処理ですが、データベースが変わったからといってJavaの記述方法が大きく変わることもないので、一連の流れで接続方法を把握してしまえば応用が効きます。
無料のデータベースを使用すれば、ローカル環境でも気軽に試すことが出来ますので、ぜひこの機会にJavaでデータベースを使ったプログラム開発にチャレンジしてみてください。
特に理由がなければ「dmg」ファイルを選択して、インストールを進める方法が簡単です。