
JavaのJDBCを利用した練習問題を紹介します!
Level1~3を紹介していく予定です。
初学者向けに作られた(受講した講座に出てきた)問題を記載しますので読者の参考になれば幸いです。(^_^)/
(Windows・Eclipse_2022-12、及びXAMPPのMySQLを使用します。)
今回は、Level1の問題です。
事前にデータベース(MySQL)に下記テキストをご自身のMySQLにインポートして下さい。
もしご自身のMySQLに直接入力したい場合は、下記を参考に作成してください。
| id | name | age | sex | co_id |
| 1 | 山田太郎 | 22 | 男 | 3 |
| 2 | 天海晴香 | 22 | 女 | 1 |
| 3 | 神谷幸弘 | 25 | 男 | 3 |
| 4 | 今井香奈 | 23 | 女 | 2 |
| 5 | 古沢依子 | 22 | 女 | 7 |
| 6 | 硲道雄 | 23 | 男 | 1 |
| 7 | 成宮由芽 | 21 | 女 | 7 |
| 8 | 神楽零 | 21 | 男 | 6 |
| 9 | 蒼井恭介 | 24 | 男 | 5 |
| 10 | 榊夏樹 | 24 | 男 | 6 |
もしJDBCについて、まったく分からない様でしたら下記のYouTube動画で学ぶのがお勧めです!

私もこのYouTubeを繰り返し見直しながら勉強しました(^ω^)
本当に分かり易い解説をしているのでお勧めです!
1.Java JDBC練習問題(JDBCでSELECT文を実行)
trainee 表を用いてidが3以下のレコード全てを下記のように表示するプログラムを作成しなさい。
(パッケージ名:test、クラス名:DBAccess_test1)
実行結果例
- ID:1 名前:山田太郎 年齢:22 性別:男
- ID:2 名前:天海晴香 年齢:22 性別:女
- ID:3 名前:神谷幸弘 年齢:25 性別:男
2.解答例(Java JDBC練習問題)
DBAccess_test1クラス
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBAccess_test1 {
public static void main(String[] args) {
String URL = "jdbc:mysql://localhost/〇〇〇〇〇";
String USER = "〇〇〇〇";
String PASSWORD = "〇〇〇〇";
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//DBに接続
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(URL, USER, PASSWORD);
//スタートメントを生成
ps = con.prepareStatement("SELECT * FROM trainee WHERE id<=3");
rs = ps.executeQuery();
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
System.out.println("ID:"+id+" 名前:"+name+" 年齢:"+age+" 性別:"+sex);
}
}catch (Exception e) {
e.printStackTrace();
} finally {
//リソースを解放
try {
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3.解説(Java JDBC練習問題)

出来限り細かく解説してみたいと思います。
誤りがありましたら、コメントにてご指摘いただけますと嬉しいです!!
インポートについて【import java.sql.*; 】
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
上記のインポート部分ですが、DBへの接続する場合は【 import java.sql.*; 】を記載しています。
これを記載してコンパイルすると必要なインポートを自動で記載してくれます。
データベースへの接続
①String URL = "jdbc:mysql://localhost/〇〇〇〇〇";
②String USER = "〇〇〇〇";
③String PASSWORD = "〇〇〇〇";
①の部分は、MySQLのデータベース名を記載してください。
②・③については、ご自身で設定したUSER名とPASSワードを入力してください。
④Connection con = null;
⑤PreparedStatement ps = null;
⑥ResultSet rs = null;
⑦Class.forName("com.mysql.cj.jdbc.Driver");
⑧con = DriverManager.getConnection(URL, USER, PASSWORD);
⑨ps = con.prepareStatement("SELECT * FROM trainee WHERE id<=3");
⑩rs = ps.executeQuery();
上記の部分が『データベースへアクセスするコード』になります。
④・⑤・⑥は、変数名を先に宣言(初期化)しています。

必ずしも宣言する必要はないですが、個人的にもこちらの方が分かり易い思っています!
④-⑧、⑤-⑨、⑥-⑩を組み合わせて記載するやり方でも良いかと思います。
例として下記に記載しておきます。
(例)
Connection con = DriverManager.getConnection(URL, USER, PASSWORD);
PreparedStatement ps = con.prepareStatement("SELECT * FROM trainee WHERE id<=3");
ResultSet rs = ps.executeQuery();
⑦の記載については、ドライバクラスの読み込みに必要な文です。
これを記載していないとJavaのバージョンによっては、エラーが出ますので記載しておきましょう。
データベースから取得したデータを変数に格納
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
System.out.println("ID:"+id+" 名前:"+name+" 年齢:"+age+" 性別:"+sex);
上記については、取得するデータが複数になることが想定される場合に【while(rs.next()) 】を使用します。
データベースへのアクセスをクローズ
ps.close();
con.close();
最後にデータベースへのアクセスを閉じる処理を記載しています。
今のところ必ず記載する必要はないですが、長期間動作し続けるプログラムを書くことが多い場合は、明示的にクローズしてあげないと思わぬ負荷がかかって問題が発生する事がある様です。
4.まとめ(Java JDBC練習問題)
ここまでの解説を見て、よく分からなかったという方がいましたら、先にも紹介しましたらYouTubeを是非見て欲しいと思います。ヾ(≧▽≦)ノ
今回の問題が、少しでも読者の方の参考になれば幸いです。

間違いや箇所やもっと詳しく聞きたいという等、何かございましたらコメントや問い合わせよりご連絡いただけますと嬉しいです!!
近日中にLevel2の問題を投稿予定です。
今後ともよろしくお願いします!
UPSTART!!(=゚ω゚)ノ
#Java #JDBC #プログラム #初学者 #XAMPP #MySQL #練習問題

コメント