こんにちは、大学時代にプログラミングを始め、現在はエンジニアをしているuhablog(ウハブログ)です。
今回の記事ではJavaでMySQLに接続してwhere句によって条件を指定したselect文によってデータを取得して表示する方法を解説していきます。
前提としてMySQL側でデータベースとテーブルが準備されていることとします。
使うデータベース名やテーブル名は以下の通りです。
- データベース名:testdb
- テーブル名:test_table
- user: root
- password: rootpass
なおtest_tableはintのidとvarcharのnameをカラムとして持つテーブルになります。
いくつかのデータが既に入っているものとします。
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
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("プログラムを終了します。");
}
}
}
データベースと接続
// 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文でデータを取得する方法を解説してきました。
挫折せずにプログラミングを学ぶためには?
僕はプログラミングで挫折した経験があります。
エラーの連続やエラーが解消しても思った通りに動かないといったことが原因で、プログラミングが嫌いでした。
「プログラミングって全然意味わからないし、全然楽しくない」そう思っていました。
原因は当時周りに聞ける人が誰もいなかったからです。
プログラミング学習をしていく上で周りに聞ける環境というのはとても大切です。
周りに聞ける人なんていない
そんな人におすすめなのが月額10,780円で現役エンジニアに質問できる、プログラミングスクールのFreeksです。
多くのプログラミングスクールが数十万円払って通うところを月額10,780円から通うことができるのはコスパが良いです。
しかもサブスク制で、自分のペースで学ぶことができ嫌になったらすぐにやめることができます。
「周りに誰も聞ける人がいなくて、エラーが解決できない」「プログラミング全然楽しくない」という方は、無料カウンセリングを受けてみて下さい。
【関連記事】Freeks評判、口コミ