【現役エンジニアが解説!】Java・whereで条件指定してデータを取得する

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

前提としてMySQL側でデータベースとテーブルが準備されていることとします。準備ができていない方はこちらの記事を参考にしながら準備を進めてください。使うデータベース名やテーブル名は以下の通りです。

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

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

ご質問等あればこちらのTwitterアカウントまでお願いします。

現役エンジニアが教えるJava初心者からWebアプリ開発できるようになるまでの勉強法>>>

サンプルコード

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) {
		// TODO 自動生成されたメソッド・スタブ
		String url = "jdbc:mysql://localhost:3306/testdb";
		String user = "root";
		String password = "rootpass";
		String sql = "select * from test_table where id = ?;";

		try (Connection con = DriverManager.getConnection(url, user, password);
				PreparedStatement ps = con.prepareStatement(sql)){
			ps.setInt(1, Integer.parseInt(args[0]));
			ResultSet rs = ps.executeQuery();

			System.out.println("idが" + args[0] + "のデータを取得します。");
			while(rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("name");
				System.out.println(id + " | " + name);
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			System.out.println("プログラムを終了します。");
		}

	}

}

コマンドライン引数で指定されたidと一致するデータを取得した後に表示するプログラムです。以下順番に解説していきます。

データベースと接続

String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
tring password = "rootpass";

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

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

SQL文の実行

String sql = "select * from test_table where id = ?;";
PreparedStatement ps = con.prepareStatement(sql)

ConnectionオブジェクトのprepareStatementメソッドにSQL文の基本部分を引数として渡します。where句によって条件を指定するために条件部分のみ?にしておきます。

ps.setInt(1, Integer.parseInt(args[0]));

SQL文の?にしていた部分に値を入れるためにPreparedStatementオブジェクトのsetIntメソッドを呼び出します。第一引数には何番目の?に値を入れたいのか指定します。今回は?が一つしかないので1になりますが、?が二つ以上ある場合はこのメソッドを何回も読んで値を入れていく必要があります。

さらに今回はint型の値を入れるのでsetIntになりますが、String型の文字列などを入れたい場合にはsetStringメソッドを使う必要があります。

このメソッドを実行することでSQL文が完成します。

ResultSet rs = ps.executeQuery();

さらにPrepareStatmentのexecuteQueryメソッドを使うことによってSQL文が実行されます。戻り値にはResultSetオブジェクトが返却されるのでこれを変数に入れておきます。

データの表示

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ループ内の処理が実行され、全ての行が出力し終わるとループを抜けます。

動作確認

該当するデータが存在する場合

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

該当するデータが存在しない場合

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

関連記事

コメント

タイトルとURLをコピーしました