広告 |
---|
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 2011年12月15日 Java総合講座 - 初心者から達人へのパスポート 2009年11月開講コース 050号 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:vol.xxx(xxxは番号)が振られています。 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.データベースを使用するアプリケーションの開発(続き) ======================================================== HumanResourceEntryPaneの「更新」のページで「更新」ボタンを クリックしたら、データベースのEMPLOYEEテーブルの更新を行う ように、EmployeeDbManagerクラスに機能を追加しましょう。 では、EclipseでEmployeeDbManagerのエディターを開き、以下の 編集を行ってください。 まず、下記のPreparedStatement型の変数 -------------------------------------------------------- private String updateSql = "UPDATE EMPLOYEE SET NAME = ?," + " DATE_OF_BIRTH = ?, DEPART_NUM = ? WHERE EMP_NUM = ?"; -------------------------------------------------------- を追加しましょう。 次に、下記のメソッドを追加しましょう。 -------------------------------------------------------- public boolean updateData(Employee anEmployee) { try { connect(); PreparedStatement selectPs = conn.prepareStatement(selectSql); selectPs.setInt(1, anEmployee.getEmployeeNumber()); ResultSet rs = selectPs.executeQuery(); if (!rs.next()) return false; selectPs.close(); conn.setAutoCommit(false); PreparedStatement updatePs = conn.prepareStatement(updateSql); updatePs.setString(1, anEmployee.getName()); updatePs.setDate(2, new java.sql.Date(anEmployee.getDateOfBirth().getTimeInMillis())); updatePs.setInt(3, anEmployee.getDepartmentNumber()); updatePs.setInt(4, anEmployee.getEmployeeNumber()); updatePs.executeUpdate(); updatePs.close(); conn.commit(); disconnect(); } catch (SQLException exception) { exception.printStackTrace(); } return true; } -------------------------------------------------------- これも、ほとんどinsertData()メソッドを作ったときと同様のソー ス・コードですから、説明しなくても理解できますね。 一言だけ説明しておくと、insertData()メソッドは新規登録を行う ためのものですから、あらかじめ同じ社員番号のデータが「存在し ない」ことを確認しておくのに対し、updateData()メソッドのほう は既に存在している社員のデータに対してデータの変更を行うため のものですから、あらかじめ同じ社員番号のデータが「存在してい る」ことを確認しています。 では、続いてHumanResourceEntryPane側の編集を行いましょう。 HumanResourceEntryPaneのエディター(WindowBuilder Editor)を開いて Designビューにおいて「更新」のページを表示してください。 「更新」ボタンを右クリックし、「Add event handler」→「アクション」 →「actionPerformed」を選択します。 そうすると、getJButtonUpdate()メソッドの中に下記のソース・コード が自動生成されますね。 -------------------------------------------------------- jButtonUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); -------------------------------------------------------- これを下記のように編集しましょう。 -------------------------------------------------------- jButtonUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Employee anEmployee = new Employee(); int empNumber; try { empNumber = Integer.parseInt(getJTextFieldEmpNum().getText()); } catch (NumberFormatException e1) { getMessageDialog().getTextPane().setText("エラー:社員番号の入力値が数字になっていません。"); getMessageDialog().setVisible(true); return; } anEmployee.setEmployeeNumber(empNumber); anEmployee.setName(getJTextFieldName().getText()); CalendarConverter aCalConverter = new CalendarConverter(); aCalConverter.setDay(Integer.parseInt(getJTextFieldDay().getText())); aCalConverter.setMonth(Integer.parseInt(getJTextFieldMonth().getText())); aCalConverter.setJaNameOfEra(getJComboBoxEra().getSelectedIndex()); switch (aCalConverter.getJaNameOfEra()) { case 0: case 1: case 2: case 3: aCalConverter.setJaYear(Integer.parseInt(getJTextFieldYear().getText())); aCalConverter.convertJaCal2GreCal(); break; default: aCalConverter.setGreYear(Integer.parseInt(getJTextFieldYear().getText())); break; } anEmployee.setDateOfBirth(aCalConverter.getGreYear(), aCalConverter.getMonth(), aCalConverter.getDay()); ComboBoxModelOfDepartment aBoxModelOfDepartment = (ComboBoxModelOfDepartment) getJComboBoxDepart().getModel(); Department aDepartment = (Department)aBoxModelOfDepartment.getDepartmentList().get(getJComboBoxDepart().getSelectedIndex()); anEmployee.setDepartmentNumber(aDepartment.getDepartmentNumber()); EmployeeDbManager empDbManager = new EmployeeDbManager(); if (empDbManager.updateData(anEmployee)) { getMessageDialog().getTextPane().setText("更新が完了しました。"); getMessageDialog().setVisible(true); } else { getMessageDialog().getTextPane().setText("指定された社員番号が存在しないため、更新はできませんでした。"); getMessageDialog().setVisible(true); } } }); -------------------------------------------------------- このソース・コードも、もう説明不要ですね。 編集が終わったらテスト(HumanResourceJFrameの実行)をしてみま しょう。 「検索」のページ(「検索」タブをクリックする)で「検索」ボタン をクリックし、JTableに表示されたリストの中から好きな行を選択 (クリック)してから、「更新」のページを開いて(「更新」タブを クリックして)ください。 「更新」のページに表示されたデータのうち「社員番号」以外のデー タを変更してから、「更新」ボタンをクリックしてください。 ダイアログウインドウが開いて(ソース・コードで組み込んだ通りの) メッセージが表示されることを確認しましょう。 これで「更新」の基本的な機能は完成しました。 (使い勝手をよくするために、もう少しソース・コードを追加/変更 したいという人は、どうぞ自分でやってください。) では、今回はここまで。 (続く) ======================================================== ◆ 02.文法解説 [do-while文] ======================================================== [do-while文] 以前紹介したwhile文、すなわち -------------------------------------------------------- while (論理式) { <実行したい文> } -------------------------------------------------------- という構文によく似たループには、他にdo-while文というものが あります。 これは、 -------------------------------------------------------- do { <実行したい文> } while (論理式); -------------------------------------------------------- という構文で、「論理式と書いた部分がtrueの値を返す間はブロッ ク({と}の間)を繰り返し実行する」という点ではwhile文と同じ ですが、ただし、while文では先に論理式を評価(evaluate = その 値を調べること)して、その結果に応じて<実行したい文>を実行す るかどうかを判断するのに対し、do-while文では、まず<実行した い文>を実行してから論理式を評価し、その結果に応じて次に<実行 したい文>を実行するかどうかを判断するという点が異なります。 したがってdo-while文では、<実行したい文>は最低一回は必ず実行 されるという点がwhile文と異なります。 たとえば、 -------------------------------------------------------- int i = 0; do { i += 10; System.out.println("i = " + i); } while(i < 0); -------------------------------------------------------- とすると、ブロックの中は1回だけ実行され、コンソールには i = 10 という文字列が1回だけ出力されることになります。 (続く) ================================================ ◆ 03.演習問題 ================================================ 上記のdo-while文の振る舞いを確認するために、下記の ようなプログラムを作って実行してみてください。 そして、自分で理解している通りの結果が出ることを確認 してください。 -------------------------------------------------------- public class DoWhileTest { public static void main(String[] args) { System.out.println("[Example 1]"); int i = 0; do { i += 10; System.out.println("i = " + i); } while(i < 0); do i += 10; while(i < 100); System.out.println("i = " + i); String[] a = {"日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"}; int j = 0; do { System.out.println((j + 1) + "日目は" + a[j] + "。"); j++; } while(j < a.length); } } -------------------------------------------------------- (次回に続く。) ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: http://www.flsi.co.jp/Java_text/ ★このメールマガジンは 「まぐまぐ(http://www.mag2.com)」 を利用して発行しています。 ★バックナンバーは http://www.flsi.co.jp/Java_text/ にあります。 ★このメールマガジンの登録/解除は下記Webページでできます。 http://www.mag2.com/m/0000193915.html ★このメールマガジンへの質問は下記Webページにて受け付けて います。わからない所がありましたら、どしどしと質問をお寄 せください。 http://www.flsi.co.jp/Java_text/ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ Copyright (C) 2011 Future Lifestyle Inc. 不許無断複製 |