テーブル管理Beanクラスの作成


続いて、DataTableBeanクラスを作成しましょう。このクラスでは、取得したレコードをAddressDataインスタンスのリストとしてフィールドに保持し、管理するようにしてあります。

package jp.allabout;

import java.sql.*;
import java.util.*;

public class DataTableBean {
  private List tableData;
  private String query;
  
  public DataTableBean(){
    this.createRecords();
  }
  
  public List getTableData() {
    return tableData;
  }
  public void setTableData(List tableData) {
    this.tableData = tableData;
  }
  public String getQuery() {
    return query;
  }
  public void setQuery(String query) {
    this.query = query;
  }
  
  public void createRecords(){
    this.createRecords("");
  }
  
  public void createRecords(String sql){
    Connection con = null;
    Statement state = null;
    ResultSet result = null;
    query = "select * from addressdata";
    query += (sql == null || sql.equals("")) ? "" : " where " + sql;
    tableData = new ArrayList();
    try {
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
      con = DriverManager.getConnection
        ("jdbc:derby:C:\DerbyDatabases\MyDB","admin","adminadmin");
      state = con.createStatement();
      result = state.executeQuery(query);
      while(result.next()){
        int id = result.getInt("id");
        String name = result.getString("name");
        String mail = result.getString("mail");
        String memo = result.getString("memo");
        tableData.add(new AddressData(id,name,mail,memo));
      }
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      try {
        result.close();
        state.close();
        con.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

}

ここでは、createRecordsというメソッドでデータベースにアクセスし、レコードを取得してフィールドのListに保管する処理を行っています。ざっとですが、データベースアクセスの基本的な流れを整理しておきましょう。

・まず、ドライバークラスをロードします。
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");


・指定したデータベースに接続するためのConectionを取得します。
con = DriverManager.getConnection
  ("jdbc:derby:C:\DerbyDatabases\MyDB","admin","adminadmin");


・Connectionから、Statementインスタンスを取得します。
state = con.createStatement();


・クエリーを送信し、結果のResultSetインスタンスを取得します。
result = state.executeQuery(query);


これで、データベースにアクセスし、結果となるResultSetインスタンスを取得することができました。後は繰り返しを使い、ResultSetのnextメソッドを呼び出し、ResultSetのgetIntやgetStringを使って指定したフィールドの値を取り出し、それをAddressDataインスタンスにしてListに保管する、という作業を繰り返していくだけです。