import java.awt.*; // AWTコンポーネントを使用するために必要
import java.awt.event.*; // イベントを取り扱うために必要
import java.sql.*; // データベースアクセス用

/**
 JdbcTest4 クラスの定義
 */

public class Test extends Frame implements ActionListener, ItemListener {
 java.awt.List nameList;            // AWTのリストを入れる変数
 TextField nameField, addressField, telField, emailField; // テキストフィールドを入れる変数
 Button displayButton, updateButton, addButton, deleteButton; // ボタンを入れる変数
 Panel leftPanel, rightPanel;       // パネルを入れる変数
 String displayCommand = "Display", updateCommand = "Update", 
     addCommand = "Add", deleteCommand = "Delete";  // ボタンのコマンド文字列

   String driverClassName = "org.postgresql.Driver"; // ここからいつもの
   String url = "jdbc:postgresql://localhost/test";
   String user = "04ki888";
   String password = "hogehoge";
   Connection connection;
   ResultSet resultSet;
   
   PreparedStatement prepStmt; // SELECT name 用 (リスト表示)
   PreparedStatement prepStmt_S; // SELECT用
   PreparedStatement prepStmt_I; // INSERT用
   PreparedStatement prepStmt_U; // UPDATE用
   PreparedStatement prepStmt_D; // DELETE用

   String selectStr = "SELECT name FROM address";
   String strPrepSQL_S = "SELECT * FROM address WHERE name = ?";
   String strPrepSQL_I = "INSERT INTO address VALUES(?, ?, ?, ?)";
   String strPrepSQL_U = 
      "UPDATE address SET address = ?, tel = ?, email = ? WHERE name = ?";
   String strPrepSQL_D = "DELETE FROM address WHERE name = ?";

 Test() {            // コンストラクタ
   setSize(400, 200);                 // フレームのサイズ設定
   setTitle("Test 4");   // フレームのタイトル設定
   setLayout(new GridLayout(1, 2));   // フレームのレイアウト設定

   leftPanel = new Panel();               // 左のパネルの生成
   leftPanel.setLayout(new GridLayout()); // 左のパネルのレイアウト設定
   add(leftPanel);                        // フレームに左のパネルを追加

   nameList = new java.awt.List(10);  // リストの生成
   nameList.addItemListener(this);    // フレームをリスナにする
   leftPanel.add(nameList);  // 左のパネルに追加
   
   rightPanel = new Panel();                   // 右のパネルの生成
   rightPanel.setLayout(new GridLayout(6, 2)); // 右のパネルのレイアウト設定
   add(rightPanel);                            // フレームに右のパネルを追加

   rightPanel.add(new Label("name"));        // 右のパネルにnameラベル追加
   nameField = new TextField(15);            // nameフィールドの生成
   rightPanel.add(nameField);                // 右のパネルにnameフィールド追加
   rightPanel.add(new Label("address"));     // 右のパネルにaddressラベル追加
   addressField = new TextField(15);         // addressフィールドの生成
   rightPanel.add(addressField);             // 右のパネルにaddressフィールド追加
   rightPanel.add(new Label("tel"));       // 右のパネルにtelラベル追加
   telField = new TextField(15);           // telフィールドの生成
   rightPanel.add(telField);               // 右のパネルにtelフィールド追加
   rightPanel.add(new Label("email"));     // 右のパネルにemailラベル追加
   emailField = new TextField(15);         // emailフィールドの生成
   rightPanel.add(emailField);             // 右のパネルにemailフィールド追加
   displayButton = new Button(displayCommand);   // displayボタンの生成
   displayButton.addActionListener(this);        // フレームをリスナにする
   rightPanel.add(displayButton);            // 右のパネルにdisplayボタン追加
   updateButton = new Button(updateCommand); // updateボタンの生成
   updateButton.addActionListener(this);     // フレームをリスナにする
   rightPanel.add(updateButton);             // 右のパネルにupdateボタン追加
   addButton = new Button(addCommand);       // addボタンの生成
   addButton.addActionListener(this);        // フレームをリスナにする
   rightPanel.add(addButton);                // 右のパネルにaddボタン追加
   deleteButton = new Button(deleteCommand); // deleteボタンの生成
   deleteButton.addActionListener(this);     // フレームをリスナにする
   rightPanel.add(deleteButton);             // 右のパネルにdeleteボタン追加

   addWindowListener ( new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
	try { // 後処理
	    prepStmt.close();
	    prepStmt_S.close();
	    prepStmt_I.close();
	    prepStmt_U.close();
	    prepStmt_D.close();
	    connection.close();
	} catch (Exception e) {
	    e.printStackTrace();
	}
	System.exit(0);
    }
} ) ; // ウィンドウを閉じる処理 

       try { // ドライバマネージャとコネクション

           Class.forName(driverClassName);
           connection = DriverManager.getConnection(url, user, password);

//           prepStmt = connection.prepareStatement(selectStr);
 //          prepStmt_S = connection.prepareStatement(strPrepSQL_S);
  //         prepStmt_I = connection.prepareStatement(strPrepSQL_I);
   //        prepStmt_U = connection.prepareStatement(strPrepSQL_U);
    //       prepStmt_D = connection.prepareStatement(strPrepSQL_D);

       } catch (Exception e) {
           e.printStackTrace();
       }

displayList(); // 早速リストに名前表示


 }

 public void itemStateChanged(ItemEvent ie) { // 選択項目が変化した時の処理
     displayData(); // 各フィールドにデータ表示
 }

 public void clearList() { // リストクリア
     nameList.removeAll(); // リストの項目をすべて削除
 }

 public void displayList() { // リスト項目表示
     try {
  resultSet = prepStmt.executeQuery(); // 名前の列だけ抜き出す
  while (resultSet.next()) {
      String name = resultSet.getString("name");
      nameList.add(name); // リストに名前を追加
  } 
     } catch (Exception e) {
  e.printStackTrace();
     }
 }

 public void displayData() { // 選択項目データ再表示
     String name = nameList.getSelectedItem(), // 名前はリストの選択項目 
  address = "", tel = "", email = "";
     try {
  prepStmt_S.setString(1, name);
  resultSet = prepStmt_S.executeQuery();
  while (resultSet.next()) { // 同じ名前の場合は最後が有効
      name = resultSet.getString("name");
      address = resultSet.getString("address");
      tel = resultSet.getString("tel");
      email = resultSet.getString("email");
  }
  nameField.setText(name); // 各フィールドに値をセット
  addressField.setText(address);
  telField.setText(tel);
  emailField.setText(email);
     } catch (Exception e) {
  e.printStackTrace();
     }
 }
 public void updateData() { // 項目データ更新
     String name = nameList.getSelectedItem(), // 更新する行の名前
     address = "", tel = "", email = "";
     nameField.setText(name); // 念のため名前フィールドを元に
     address = addressField.getText(); // 残りの各データをもらう
     tel = telField.getText();
     email = emailField.getText();
     try { // 新データに更新
  prepStmt_U.setString(1, address);
  prepStmt_U.setString(2, tel);
  prepStmt_U.setString(3, email);
  prepStmt_U.setString(4, name);
  prepStmt_U.executeUpdate(); 
     } catch (Exception e) {
  e.printStackTrace();
     }
 }

 public void addData() { // 項目データ追加
     String name = "", address = "", tel = "", email = "";
     name = nameField.getText(); // 各データをもらう
     address = addressField.getText();
     tel = telField.getText();
     email = emailField.getText();
     try { // 新データを追加
  prepStmt_I.setString(1, name);
  prepStmt_I.setString(2, address);
  prepStmt_I.setString(3, tel);
  prepStmt_I.setString(4, email);
  prepStmt_I.executeUpdate(); 
     } catch (Exception e) {
  e.printStackTrace();
     }
     clearList(); // リストをクリア
     displayList(); // リストを表示
 }

 public void deleteData() { // 選択項目データ削除
     String name = nameList.getSelectedItem(); // 名前をもらう
     try { // 名前の行を削除
  prepStmt_D.setString(1, name);
  prepStmt_D.executeUpdate(); 
     } catch (Exception e) {
  e.printStackTrace();
     } 
     clearList(); // リストのクリア
     displayList(); // リストの表示
 }

 public void actionPerformed(ActionEvent ae) { // ボタンが押された時に行う処理
   String command = ae.getActionCommand();   // イベントからアクションコマンドを得る
   if (command.equals(displayCommand)) {     // displayコマンドなら
      displayData(); // 表示処理
   } else if (command.equals(updateCommand)) { // updateコマンドなら
      updateData(); // 更新処理
   } else if (command.equals(addCommand)) { // addコマンドなら
      addData(); // 追加処理
   } else if (command.equals(deleteCommand)) { // deleteコマンドなら
      deleteData(); // 削除処理
   } 
 }

 public static void main(String[] argv) {
   Test myFrame = new Test(); // フレームの生成
   myFrame.setVisible(true);          // フレームの可視化
 }
}
最終更新:2006年06月14日 12:42