JavaからMySQLに接続する方法(Mavenを使います)

投稿日: 作成:   更新:

JavaからMySQLに接続する方法を解説します。

  • JavaからMySQLへ接続したい
  • SELECT文で条件を指定して実行するには?

このような内容について解説します。

私はWEB開発中心に、フロントエンド、サーバーサイド、サーバー構築など経験豊富なエンジニアです。
これからプログラミングを始める方に向けて、少しでも分かりやすく解説していきたいと思います。

WEBシステム開発において、MySQLやPostgreSQLなどへのデータベース接続はほぼ必須なので、これを機に覚えましょう。

それでは行きましょう!

MySQL Connectorをインストール(Maven)

JavaからMySQLへ接続するには、
「MySQL Connector」というMySQL用のJDBCドライバが必要になります。

今回は、MavenでJDBCドライバをインストールする手順を紹介しますので、Mavenプロジェクトが前提で解説します。

Mavenプロジェクトを作成するには、
Eclipseの「パッケージ・エクスプローラー」の空白部分を右クリックして「新規 > Mavenプロジェクト」から作成してください。

Maven Repositoryでテキストをコピー

Mavenプロジェクトのpom.xmlに記載するためのテキストをコピーします。

まず、Maven Repositoryサイトの「MySQL Connector」ページにアクセス。
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.23

次の画面が開きましたら、Mavenタブ内のテキストをコピーしておきます。

pom.xmlへ追記する

Mavenプロジェクト直下にある「pom.xml」を開いて、先ほどMaven Repositoryからコピーしたテキストを、次のイメージのように貼り付けます。

※<dependencies></dependencies>で囲んであげる必要がありますので注意ください。

このpom.xmlファイルを保存すると、「MySQL Connector」のjarファイルがUsersの「.m2」フォルダに自動的にダウンロードされて使用できようになります。

サンプルデータを用意する

今回は、MySQLにサンプルデータ「users」テーブルを用意しました。

データは「山田太郎、山田花子」の2レコード入っています。
(イメージはphpMyAdminです)

こちらのテーブルにJavaからMySQLへ接続したいと思います。

JavaからMySQL接続

MySQLに接続するソースコードを書いてみます。

package sample_maven;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Sample {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            // データベース接続
            conn = DriverManager.getConnection(
                    // ホスト名、データベース名
                    "jdbc:mysql://localhost:3306/testdb",
                    // ユーザー名
                    "root",
                    // パスワード
                    "");

            // SQL文をセット
            stmt = conn.prepareStatement("SELECT * FROM users");
            // SQL文を実行
            rs = stmt.executeQuery();

            // ループして1レコードずつ取得
            while (rs.next()) {
                String id      = rs.getString("id");
                String name    = rs.getString("name");
                String address = rs.getString("address");
                String tel     = rs.getString("tel");

                System.out.println(id + "、" + name + "、" + address + "、" + tel);
            }

        } catch (SQLException e) {
            System.out.println("データベース接続エラー。");

        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                System.out.println("データベース接続エラー。");
            }
        }
    }
}

実行結果:

テーブルにあった2レコードを表示することができました。

1レコードにある各列の値を「rs.getString()」で列名を指定して取得しています。
もし、数値の場合は「rs.getInt()」を使用するなど、上手く型を合わせてあげてください。

あと、SQL実行するには「try ~ catch ~ finally」で囲んであげる必要がありますが、これは決まり文句ですね。

条件指定してSQL実行

SQL文に条件指定するには、PreparedStatementに値を渡して使用します。

「JavaからMySQL接続」で説明したソースコードに条件指定を追加。

「setString()」関数を使用して、1つ目の「?」に対して値「山田太郎」を条件指定しています。(引数1が1つ目の「?」ってことです。)

また、数値の場合は「setInt()」で指定するなど、getと同様に型に合わせて関数を使い分けてください。

conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/testdb",
        "root",
        "");

// 条件指定したSQL文をセット
stmt = conn.prepareStatement("SELECT * FROM users WHERE name = ?");

// 1つ目の「?」に対して値「山田太郎」をセット
stmt.setString(1, "山田太郎");

rs = stmt.executeQuery();

while (rs.next()) {
    String id      = rs.getString("id");
    String name    = rs.getString("name");
    String address = rs.getString("address");
    String tel     = rs.getString("tel");

    System.out.println(id + "、" + name + "、" + address + "、" + tel);
}

実行結果:

「name=山田太郎」のレコードを取得することができました。

まとめ

JavaからMySQLに接続する方法を解説しました。

  • MySQL Connectorをインストール(Mavenのpom.xmlでインストール)
  • JavaからMySQL接続(ソースコードの書き方)
  • 条件指定してSQL実行(setString関数を使用する)

今回は「MySQL Connector」を使ってMySQL接続しましたが、
実践でのデータベース接続は Springなどのフレームワークのルールに従って接続します。

ですが、MySQLデータベース接続に必要な「ホスト名、データベース名、ユーザー名、パスワード」の指定の仕方・考え方は同じですので、
この記事の内容を知って損はないでしょう。

Springフレームワークを使ってDB接続したい方は次の本に分かりやすく書いてありますので、学習してみるのも良いと思います。

この本はPostgreSQLで書かれていますが、接続情報を「jdbc:postgresql → jdbc:mysql」に変えるだけでMySQLへ接続できます。

それでは!