スポンサーリンク

【Java】eclipseでJDBCを使用した練習問題
(JDBCでUPDATEを実行)

JAVA練習問題集
ギダイ
ギダイ

JavaのJDBCを利用した練習問題を紹介します!

Level1~3を紹介していく予定です。

初学者向けに作られた(受講した講座に出てきた)問題を記載しますので読者の参考になれば幸いです。(^_^)/

(Windows・Eclipse_2022-12、及びXAMPPのMySQLを使用します。)

今回は、Level2の問題です。

Level1の問題は、下記よりご確認ください。

事前にデータベース(MySQL)に下記テキストをご自身のMySQLにインポートして下さい。

もしご自身のMySQLに直接入力したい場合は、下記を参考に作成してください。

idnameagesexco_id
1山田太郎223
2天海晴香221
3神谷幸弘253
4今井香奈232
5古沢依子227
6硲道雄231
7成宮由芽217
8神楽零216
9蒼井恭介245
10榊夏樹246
trainee表
co_idco_nameco_location
1〇〇商事港区
2△△堂目黒区
3□□製薬新宿区
4××ソフト北区
5●●工業渋谷区
6▲▲建設豊島区
7■■製作所文京区
8海老原製作所新宿区
company表

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 #練習問題

コメント

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