SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

第22回

  • X ポスト
  • このエントリーをはてなブックマークに追加

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 + "'");

次のページ
DAO経由でデータベースにアクセスする

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5364 2010/09/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング