
JavaのJDBCを利用した練習問題を紹介します!
Level1~3を紹介していく予定です。
初学者向けに作られた(受講した講座に出てきた)問題を記載しますので読者の参考になれば幸いです。(^_^)/
(Windows・Eclipse_2022-12、及びXAMPPのMySQLを使用します。)
今回は、Level2の問題です。
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 |
| co_id | co_name | co_location |
| 1 | 〇〇商事 | 港区 |
| 2 | △△堂 | 目黒区 |
| 3 | □□製薬 | 新宿区 |
| 4 | ××ソフト | 北区 |
| 5 | ●●工業 | 渋谷区 |
| 6 | ▲▲建設 | 豊島区 |
| 7 | ■■製作所 | 文京区 |
| 8 | 海老原製作所 | 新宿区 |
1.Java JDBC練習問題(JDBCでUPDATEを実行)
trainee 表を用いて id:10 の co_id を 6番 から 1番 に変更して下記のように表示するプログラミングを作成しなさい。
(パッケージ名:test、クラス名:DBAccess_test2)
実行結果例
- 更新に成功しました。
- ID:10 名前:榊夏樹 年齢:24 性別:男 会社名:〇〇商事
2.解答例(Java JDBC練習問題)
DBAccess_test2クラス
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBAccess_test2 {
@SuppressWarnings("resource")
public static void main(String[] args) {
String URL = "jdbc:mysql://localhost/〇〇〇〇〇";
String USER = "〇〇〇〇";
String PASSWORD = "〇〇〇〇";
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
int result = -1;
try {
//DBに接続
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection(URL, USER, PASSWORD);
//スタートメントを生成
ps = con.prepareStatement("UPDATE trainee SET co_id=1 WHERE id=10");
result = ps.executeUpdate();
if (result == 1) {
System.out.println("更新に成功しました。");
//DBへ再接続とtraineeとcompanyを結合
ps = con.prepareStatement("SELECT * FROM trainee INNER JOIN company ON trainee.co_id = company.co_id WHERE id=10");
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");
String co_name = rs.getString("co_name");
System.out.println("ID:" + id + " 名前:" + name + " 年齢:" + age + " 性別:" + sex + " 会社名:" + co_name);
}
} else {
System.out.println("更新に失敗しました。");
}
} 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;
⑦int result = -1;
⑧Class.forName("com.mysql.cj.jdbc.Driver");
⑨con = DriverManager.getConnection(URL, USER, PASSWORD);
⑩ps = con.prepareStatement("UPDATE trainee SET co_id=1 WHERE id=10");
上記の部分が『データベースへアクセスするコード』になります。
④・⑤・⑥は、変数名を先に宣言(初期化)しています。
⑦は、更新処理を行う際にINT型を格納する必要がある為、初期値を「-1」と設定しています。
※INT型は、初期値に null が設定できない。

必ずしも宣言する必要はないですが、個人的にもこちらの方が分かり易い思っています!
⑧の記載については、ドライバクラスの読み込みに必要な文です。
これを記載していないとJavaのバージョンによっては、エラーが出ますので記載しておきましょう。
⑩のSQL文については、データ更新を行う内容になっています。
今回は、【 id=10 のデータに co_id がある場合、co_id=1 に更新する 】という内容です。
データベースから取得したデータを変数に格納
⑪result = ps.executeUpdate();
⑫if (result == 1) {
System.out.println("更新に成功しました。");
⑬ps = con.prepareStatement("SELECT * FROM trainee INNER JOIN company
ON trainee.co_id = company.co_id WHERE id=10");
⑭rs = ps.executeQuery();
⑮if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
String co_name = rs.getString("co_name");
System.out.println("ID:" + id + " 名前:" + name + " 年齢:" +
age + " 性別:" + sex + " 会社名:" + co_name);
}
⑪の result にデータ更新が上手くいったら、更新した行の数を示す整数値の「 1 」が格納されます。
⑫・⑬・⑭・⑮は、⑪のデータ更新が上手くいった場合に行う処理を記載しています。
⑫には、問題文に指定されていた文言(「更新に成功しました」)を出力するために System.out.println を記載しています。
⑬については、traineeとcompanyを結合するためのSQL文を記載しています。
今回は、【 trainee と company を co_id で結合する 】という内容です。
⑮にて取得したデータを変数に格納しています。
Level1では While文 を使用していましたが、今回する取得するデータは1つ決まっているので if文 を利用しています。
データベースへのアクセスをクローズ
ps.close();
con.close();
最後にデータベースへのアクセスを閉じる処理を記載しています。
今のところ必ず記載する必要はないですが、長期間動作し続けるプログラムを書くことが多い場合は、明示的にクローズしてあげないと思わぬ負荷がかかって問題が発生する事がある様です。
4.まとめ(Java JDBC練習問題)
今回は、Level1の問題よりも多くの文法を組み合わせる内容になっていました!
上記の解説でも分からない場合は、下記リンクのYouTubeから分からない箇所の動画を見てもらえれば良い勉強になると思います!
今回の問題が、少しでも読者の方の参考になれば幸いです。

間違いや箇所やもっと詳しく聞きたいという等、何かございましたらコメントや問い合わせよりご連絡いただけますと嬉しいです!!
次回は、標準入力からデータベースへアクセスする問題を記載する予定です(*^^)v
今後ともよろしくお願いします!
UPSTART!!(=゚ω゚)ノ
#Java #JDBC #プログラム #初学者 #XAMPP #MySQL #練習問題


コメント