CodeZine(コードジン)

特集ページ一覧

Javaで軽快に使える「軽量フレームワーク」特集
~クールなGUIをシンプルなスクリプトで作成するZK(3)

第22回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/09/02 14:00

目次

DAOクラスの作成

 では、続いて用意したデータベースにアクセスするためのDAO(Data Access Object)クラスを作成しましょう。これは、Javaのクラスとして用意してもいいですが、今回はZKのスクリプトにそのまま埋め込んで利用できる形で作ることにします(スクリプトはこの後に作成します)。

public class DAO {
  String url = "jdbc:derby:C:\\DerbyDatabases\\sampledata;create=true";

  public DAO() {
    try {
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

  public List findAll(){
    java.sql.Connection conn = null;
    java.sql.Statement stmt = null;
    List allDatas = new ArrayList();
    try {
      conn = java.sql.DriverManager.getConnection(url);
      stmt = conn.createStatement();
      String query = "select * from SampleRowData";
      java.sql.ResultSet rs = stmt.executeQuery(query);
      gmsg = query;
      SampleRowData data;
      while (rs.next()) {
        data = new SampleRowData();
        data.setName(rs.getString(1));
        data.setMail(rs.getString(2));
        data.setTel(rs.getString(3));
        allDatas.add(data);
      }

    } catch (java.sql.SQLException e) {
      e.printStackTrace();
      gmsg = e;
    } finally {
      try {
        stmt.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
    }    
    return allDatas;
  }
  
  public boolean delete(String name){
    java.sql.Connection conn = null;
    java.sql.Statement stmt = null;
    boolean result = false;
    try {
      conn = java.sql.DriverManager.getConnection(url);
      stmt = conn.createStatement();
      if (stmt.executeUpdate("delete from SampleRowData where name = '" +
        	name + "'") > 0){
        result = true;
      }
    } catch (java.sql.SQLException e) {
      e.printStackTrace();
      gmsg = e;
    }finally {
      try {
        stmt.close();
      } catch (SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
      try {
        conn.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
    }
    return result;
  }
  
  public boolean insert(SampleRowData data){
    java.sql.Connection conn = null;
    java.sql.Statement stmt = null;
    boolean result = false;
    try {
      conn = java.sql.DriverManager.getConnection(url);
      stmt = conn.createStatement();
      String query = "insert into SampleRowData(name,mail,tel) " +
          "values ('" + data.getName() + "','" + data.getMail() +
          "','" + data.getTel() + "')";
      gmsg = query;
      if (stmt.executeUpdate(query) > 0){
        result = true;
      }
    } catch (java.sql.SQLException e) {
      e.printStackTrace();
      gmsg = e;
    } finally {
      try {
        stmt.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
      try {
        conn.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
        gmsg = e;
      }
    }
    return result;
  }
  
  public boolean update(SampleRowData data){
    java.sql.Connection conn = null;
    java.sql.Statement stmt = null;
    boolean result = false;
    try {
      conn = java.sql.DriverManager.getConnection(url);
      stmt = conn.createStatement();        
      if (stmt.executeUpdate("update SampleRowData set  mail = " + 
          data.getMail() + ",tel = '" + data.getTel()+
          "' where name = '" + data.getName() + "'") > 0){
       result = true;
      }
    } catch (java.sql.SQLException e) {
      e.printStackTrace();
    }finally{
      try {
        stmt.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
      }
      try {
        conn.close();
      } catch (java.sql.SQLException e) {
        e.printStackTrace();
      }
    }
    
    return result;
  }
}

 DAOクラスには、全データを検索し返す「findAll」、データを追加する「insert」、データを更新する「update」、データを削除する「delete」というメソッドを用意しておきました。いずれも、データをオブジェクトとしてまとめるための「SampleRowData」クラスのインスタンスとしてデータを扱うようにしてあります。以下にざっと整理しておきましょう。

findAllメソッド

 データベースにアクセスし、SampleRowDataテーブルのデータを取得し、SampleRowDataインスタンスのListとして返すものです。データベースへのアクセスは、java.sql.DriverManagerのgetConnectionでデータベースに接続し、createStatementでStatementインスタンスを用意し、executeQueryでクエリーを実行する、という形で行います。

conn = java.sql.DriverManager.getConnection(url);
stmt = conn.createStatement();
String query = "select * from SampleRowData";
java.sql.ResultSet rs = stmt.executeQuery(query);

 後は、executeQueryで取得したResultSetから、順にデータを取り出し、SampleRowDataインスタンスを作成してListに保管する、といったことを繰り返していきます。Listの形でデータがまとめられていれば、後でスクリプトから利用する場合も扱いやすくなるでしょう。

while (rs.next()) {
  data = new SampleRowData();
  data.setName(rs.getString(1));
  data.setMail(rs.getString(2));
  data.setTel(rs.getString(3));
  allDatas.add(data);
}

insert/updateメソッド

 insertは追加のためのメソッドです。引数にSampleRowDataを渡すと、これをデータベースに追加します。DriverManager.getConnectionでデータベースに接続し、createStatementでStatementを作成した後、executeUpdateでクエリーを実行する、という手順は同じです。

conn = java.sql.DriverManager.getConnection(url);
stmt = conn.createStatement();
String query = "insert into SampleRowData(name,mail,tel) " +
    "values ('" + data.getName() + "','" + data.getMail() +
    "','" + data.getTel() + "')";
if (stmt.executeUpdate(query) > 0){……

 updateも、基本的な流れは同じです。引数にSampleRowDataインスタンスを渡すと、そのnameのデータを更新します。

deleteメソッド

 引数に、削除するデータのnameを渡すと、そのデータをデータベースから削除します。これも基本的な流れは同じです。

stmt.executeUpdate("delete from SampleRowData where name = '" + name + "'");

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Javaで軽快に使える「軽量フレームワーク」特集

もっと読む

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5