質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

2991閲覧

社員IDが存在しない場合のメッセージの出し方がわかりません。

Mr.Chrome

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/05/09 00:54

編集2022/01/12 10:55

前提・実現したいこと

入力した社員IDに対応する社員が存在しない場合、「該当する社員は登録されていません」とメッセージを表示したい。

メニュー番号を入力してください: 3
更新する社員の社員IDを入力してください: 5
該当する社員は登録されていません
※「:」の右側の記述はユーザが入力した値です。

発生している問題・エラーメッセージ

社員IDが存在しない場合のメッセージの出し方がわかりません。

該当のソースコード

Java

1package jp.co.sss.jdbc.chapter05; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.sql.Connection; 7import java.sql.PreparedStatement; 8 9public class Update { 10 11public static void main(String[] args) throws IOException { 12 update(); 13 14 System.out.println("=== 社員管理システム ==="); 15 System.out.println("1. 全件表示"); 16 System.out.println("2. 登録"); 17 System.out.println("3. 更新"); 18 System.out.println("4. 削除"); 19 System.out.println("5. 終了"); 20 21 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 22 System.out.println("メニュー番号を入力してください:"); 23 String no3 = br.readLine(); 24 25} 26 27public static void update() throws IOException { 28BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 29 30Connection connection = null; 31PreparedStatement preparedStatement = null; 32System.out.println("メニュー番号を入力してください:"); 33String str = br.readLine(); 34int no3 = Integer.parseInt(str); 35switch (no3) { 36case 3: 37 try { 38 39 System.out.println("更新する社員の社員IDを入力してください: "); 40 String empId = br.readLine(); 41 System.out.println("社員名:"); 42 String empName = br.readLine(); 43 System.out.println("性別(男性:1、女性:2):"); 44 String gender = br.readLine(); 45 System.out.println("生年月日(西暦年/月/日):"); 46 String birthday = br.readLine(); 47 System.out.println("部署ID(1:営業部、2:経理部、3:総務部):"); 48 String dept_id = br.readLine(); 49 50 connection = DBManager.getConnection(); 51 52 connection.setAutoCommit(false); 53 54 String sql = "UPDATE employee SET emp_name = ?,gender = ?,birthday = ?,dept_id = ? WHERE emp_id = ?"; 55 56 preparedStatement = connection.prepareStatement(sql); 57 58 preparedStatement.setString(5, empId); 59 preparedStatement.setString(1, empName); 60 preparedStatement.setString(2, gender); 61 preparedStatement.setString(3, birthday); 62 preparedStatement.setString(4, dept_id); 63 64 int cnt = preparedStatement.executeUpdate(); 65 66 System.out.println("社員情報を更新しました"); 67 68 } catch (Exception e) { 69 try{ 70 connection.rollback(); 71 }catch(SQLException e1){ 72 e1.printStackTrace(); 73 } 74 System.out.println("システムエラーが発生しました。"); 75 } finally { 76 DBManager.close(preparedStatement); 77 DBManager.close(connection); 78 }break; 79 case 5: 80 System.out.println("システムを終了します"); 81 break; 82 } 83} 84}

試したこと

public static void update() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Connection connection = null;
PreparedStatement preparedStatement = null;
System.out.println("メニュー番号を入力してください:");
String str = br.readLine();
int no3 = Integer.parseInt(str);
switch (no3) {
case 3:
try {
System.out.println("更新する社員の社員IDを入力してください: ");
String empID = br.readLine();

String cnt_sql = "SELECT * from employee WHERE emp_id = ?"; connection = DBManager.getConnection(); preparedStatement = connection.prepareStatement(cnt_sql); preparedStatement.setString(1, empID); ResultSet result = preparedStatement.executeQuery(); int colCount = result.getMetaData().getColumnCount(); if(colCount == 0){ System.out.println("該当する社員は登録されていません"); break; }

実行結果
メニュー番号を入力してください:3
更新する社員の社員IDを入力してください: 5
社員名:

性別(男性:1、女性:2):


補足情報(FW/ツールのバージョンなど)

Oracleの演習課題で社員管理システムを作っています。
データベースはこんな感じです。
社員ID 社員名 性別 生年月日 部署名
1 鈴木太郎 男性 1986/10/12 営業部
2 田中二郎 男性 1979/07/02 経理部
3 渡辺花子 女性 1988/04/23 経理部
7 田中博人 男性 1982/02/28 営業部

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YasuhiroMiyake

2018/05/09 01:00

試したことに書かれている内容だと、どのような動作になるのでしょうか。
m.ts10806

2018/05/09 01:01 編集

「試したこと」で何がおきたのでしょうか。また、Updateの結果ではなく「更新する社員の社員IDを入力してください」の入力値をもってSelectして情報を確認はしてみましたか?
m.ts10806

2018/05/09 04:08

追記読みました。できてますよね。できている上で、どうしたいんですか?
Mr.Chrome

2018/05/09 04:21

上の結果は更新された件数でメッセージを出しています。社員IDを入力してくださいというところでデータベースにIDがなかったら該当する社員は登録されていませんと出したいです。
m.ts10806

2018/05/09 04:23

入力したIDでselectをかけてヒット件数で分岐させれば良いです。
Mr.Chrome

2018/05/09 04:31

書き方がわかりません。できれば例文を出してくれると助かります。
m.ts10806

2018/05/09 04:32

UPDATEが書けてSELECTが書けない意味が分かりませんが・・。
Mr.Chrome

2018/05/09 04:42

上のソースコードはテキストに書いてあったのを使ったものなので、申し訳ない。
m.ts10806

2018/05/09 04:45

なるほど。回答はしましたが、それぞれのコードが何のためにどのような意味を以て使われているか理解されてないということですかね。でしたらあまり「仕様じゃないです。忘れてただけです。」というようなことは言わない方がいいかもしれませんね。
m.ts10806

2018/05/09 05:14

該当のソースコードを「現在のソースコード」としてきちんと更新してください。最初から変わっていません。私の回答にもあるように回答のコードをコピペだけで達成できるようなものではありません。あくまでご希望の「例文」です。
Mr.Chrome

2018/05/09 05:17

例文を実行してみました。実行結果はException in thread "main" java.lang.NullPointerExceptionになってしましました。
m.ts10806

2018/05/09 06:00

実行したコードに更新してください。どこに入れたんですか?何度も言いますが「何かエラー等あれば調整してください。 ※適当に変数作ってますが、そこらへんもご自身で調整してください。」コピペで動くようなものは作っていません。あくまで「例文」です。実装イメージだけ持って調整してください。私の回答では「if(colCount == no3){」という書き方はしていませんが、どうしてそうなったのか・・・
m.ts10806

2018/05/09 06:28

「試したこと」ではなく「該当のソースコード」を更新してもらいたいのですが。全体像が見えないと回答しようがありません(あと、本来は私の回答にコメントをつけるべきところです。)
guest

回答3

0

例文なので動作確認していません。
何かエラー等あれば調整してください。

※適当に変数作ってますが、そこらへんもご自身で調整してください。

java

1System.out.println("更新する社員の社員IDを入力してください: "); 2String empId = br.readLine(); 3 4 5String cnt_sql = "SELECT * from employee WHERE emp_id = ?"; 6 7statement = connection.prepareStatement(cnt_sql); 8statement.setString(1, empId); 9ResultSet result = statement.executeQuery(); 10 11int colCount = result.getMetaData().getColumnCount(); 12 13if(colCount == 0){ 14 System.out.println("該当する社員は登録されていません"); 15 break; //こういうことができるかわかりませんが、ひとまず処理を抜けるような感じで 16} 17 18

投稿2018/05/09 04:43

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr.Chrome

2018/05/09 06:44

回答していただきありがとうございました。本日は時間の都合上、課題を提出することになりましたので、これで失礼します。
m.ts10806

2018/05/09 06:47

課題であれば学んだ中から必ず答えがあるのでなるべく自身でやりましょう。 じゃないと課題の意味がありません(teratailは宿題代行サイトではありません。代行であれば無償のQAサイトには向きません)
guest

0

以下の箇所でexecuteUpdateの返り値は実行したSQL文で影響を受けた行数
(今回の例では更新されたレコード数)が返りますのでそれを使えば分かるのではないでしょうか?

int cnt = preparedStatement.executeUpdate();

【参考】
Javaコード入門-prepareStatement/executeUpdateメソッド

投稿2018/05/09 03:25

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

connection.setAutoCommit(false); // ↑これがあって、
}catch(Exception e){ connection.rollback(); // ↑これもあるけど、
// 更新成功した時に connection.commit(); // ↑これをやらないのは仕様ですか?

投稿2018/05/09 01:09

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr.Chrome

2018/05/09 02:04

仕様じゃないです。忘れてただけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問