Java

【Java】Select文でwhereを使って動的に条件指定してデータを取得する

uhablog

こんにちは、大学時代にプログラミングの勉強を始め現在はエンジニアをしているuhablogです。
当ブログでは現役エンジニアがプログラミング初学者の方向けにプログラミングの学習法を発信しています。

今回の記事ではJavaでMySQLに接続してwhere句によって条件を指定したselect文によってデータを取得して表示する方法を解説していきます。

前提としてMySQL側でデータベースとテーブルが準備されていることとします。

準備ができていない方はこちらの記事を参考にしながら準備を進めてください。

使うデータベース名やテーブル名は以下の通りです。

  • データベース名:testdb
  • テーブル名:test_table
  • user: root
  • password: rootpass

なおtest_tableはintのidとvarcharのnameをカラムとして持つテーブルになります。
いくつかのデータが既に入っているものとします。

\\一流講師に学ぼう!!//

Udemyでサーブレット&jspを学ぶ!!

返金保証付き

where句の条件を動的に変更してデータを取得する

次のようなテーブルからコマンドライン引数で指定されたidと一致するデータを取得し、出力するプログラムです。

+------+--------+
| id   | name   |
+------+--------+
|    1 | Taro   |
|    2 | jiro   |
|    3 | saburo |
+------+--------+
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PreparedSelect {

    public static void main(String[] args) {

        // MySQLに接続するための情報を変数に格納
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "rootpass";

        // 今回実行するsql
        // 動的に条件を指定したい箇所を「?」にする
        String sql = "select * from test_table where id = ?;";

        // データベースに接続する
        try (Connection con = DriverManager.getConnection(url, user, password);
                PreparedStatement ps = con.prepareStatement(sql)){

            // sqlの「?」の箇所にコマンドライン引数として受け取った値を設定する
            ps.setInt(1, Integer.parseInt(args[0]));

            // sqlの実行
            ResultSet rs = ps.executeQuery();

            System.out.println("idが" + args[0] + "のデータを取得します。");

            // データの数だけ繰り返す
            while(rs.next()) {
                // 取得したデータのIDを取得
                int id = rs.getInt("id");
                // 取得したデータの名前を取得
                String name = rs.getString("name");
				
                // 取得したデータを出力する
                System.out.println(id + " | " + name);
            }
        }catch (SQLException e) {
            e.printStackTrace();
    }finally {
            System.out.println("プログラムを終了します。");
        }
    }
}
Java初心者のあなたへ

データベースと接続

// MySQLに接続するための情報を変数に格納
String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
String password = "rootpass";

try (Connection con = DriverManager.getConnection(url, user, password);

まずはデータベースと接続するための準備が記述してあります。
urlやuser、passwordといった変数を準備してそれをDriverManagerのgetConnectionメソッドに引数として渡します。
これによってconnectionオブジェクトを利用することができるようになります。

Select文の構築

実行したいSelect文を構築していきます。
はじめにベースとなるSQL文を記述し、String型の変数に格納します。
このとき動的に条件を変更したい箇所を「?」にしておくことが重要です。

// 今回実行するsql
// 動的に条件を指定したい箇所を「?」にする
String sql = "select * from test_table where id = ?;";

try構文の中で次のような記述があります。

PreparedStatement ps = con.prepareStatement(sql)

これでSQLを設定しています。

where句の条件指定

「?」の部分に条件を指定していきます。
先ほどSQLを設定したPreparedStatemantのオブジェクトである「ps」に対してsetIntメソッドを呼び出します。

// sqlの「?」の箇所にコマンドライン引数として受け取った値を設定する
ps.setInt(1, Integer.parseInt(args[0]));

今回はコマンドライン引数から受け取った値を設定するので、Integer.parseIntメソッドを使って、select文の「?」にしていた部分に値を設定します。

第一引数にはselect文の何番目の「?」に値を設定するのか指定しています。
第二引数にどんな値を設定するのか指定しています。

これによって次のようなselect文が作成されたことになります。

select * from test_table where id = (コマンドライン引数で受け取った数字);

作成したselect文を実行するのが次の記述です。
select文を実行して結果をResultSetとして受け取っています。

// sqlの実行
ResultSet rs = ps.executeQuery();

データの表示

while(rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println(id + " | " + name);
}

続いてデータの表示です。resultsetのnextメソッドを使うことで取得したデータを一行ずつ閲覧していくことが可能になります。
get〇〇メソッドの引数に取得したいカラムを指定すると該当する値を返却してくれます。

今回のテーブルではintのidとvarcharのnameがあるのでそれぞれgetIntとgetStringにidやnameといった引数を渡すことで値を取得できます。
こうして取得した値をそれぞれ変数に入れて出力します。
次の行が存在する限りwhileループ内の処理が実行され、全ての行が出力し終わるとループを抜けます。

動作確認

コマンドライン引数で2を渡して実行した場合

idが2のデータを取得します。
2 | jiro
プログラムを終了します。

コマンドライン引数で56を渡して実行した場合

idが56のデータを取得します。
プログラムを終了します。

今回はJavaでデータベースに接続してwhere句を指定したSelect文でデータを取得する方法を解説してきました。

プログラミング学習はUdemyがおすすめ

私はプログラミングの学習はUdemyで行うのが一番おすすめです。
Udemyでは動画講座でプログラミングなどのスキルを身につけることができます。
現役エンジニアがUdemyをオススメする理由は
・動画で好きなときに学べる
・一流の講師に学ぶことができる
・講師の方に質問ができる
・返金保証もある
・セールを頻繁に開催している
といったたくさんの理由があります。

現在Udemyではセールを開催しています!
通常時1万円から2万円前後の価格で講座が販売されていますが、セール時には1500円前後(ランチ代くらい)で一つの講座を購入することができます。
UdemyにはサーブレットでWebアプリ開発が学べる講座iconもあるので、JavaでWebアプリ開発する方法を学んでみたい!という方は今がチャンスです!

\\今ならセール開催中!//

Udemyでサーブレット&jspを学ぶ!!

返金保証付き

独学が不安な人へ

独学で学んでいく意志がある方にはUdemyなどで学習するのがおすすめですが、プログラミングを独学するにはそれなりにハードルがあります。

  • プログラミングで一度挫折した経験がある
  • 一人で学習する自信がないので、サポートが欲しい

という方にはプログラミングスクールを検討してみるのがおすすめです。

おすすめスクール

-Java
-, , , , ,