技術情報

データベースに接続する方法

-- 2013.01.29 GroupSession Version4.1.0 --

はじめに

GroupSessionではデータベース(H2 Database Engine)を使用しています。

ここではプラグインからデータベースへアクセスする方法と、H2コンソールを使用してデータベースへアクセスする手順を説明します。


前提条件

このドキュメントは、Java、Apache Struts、Jakarta Antについての知識がある事を前提とします。


プラグインからDBへアクセスする方法

各プラグインからDBへアクセスする方法を「Hello World!」プラグインを作成する方法で作成したソースファイルを元に説明します。

AbstractGsActionを継承することでjava.sql.Connectionを取得することができます。通常DBへアクセスする際はこのConnectionを使用してください。

また、ConnectionはAbstractGsAction側でcloseされるので各Daoクラスでcloseする必要はありません。

HelloWorldAction.java

package jp.groupsession.v2.newplugin.helloworld;
  import java.sql.Connection;
  import java.util.ArrayList;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import jp.groupsession.v2.cmn.GSConst;
  import jp.groupsession.v2.cmn.dao.BaseUserModel;
  import jp.groupsession.v2.cmn.dao.GroupModel;
  import jp.groupsession.v2.cmn.dao.UsidSelectGrpNameDao;
  import jp.groupsession.v2.struts.AbstractGsAction;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  /**
   * <br>[機  能] HelloWorldのアクションクラス
   * <br>[解  説]
   * <br>[備  考]
   *
   * @author JTS
   */
  public class HelloWorldAction extends AbstractGsAction {

      /**
       * <br>[機  能] アクションを実行する
       * <br>[解  説]
       * <br>[備  考]
       * @param map ActionMapping
       * @param form ActionForm
       * @param req HttpServletRequest
       * @param res HttpServletResponse
       * @param con DB Connection
       * @return ActionForward
       * @throws Exception 実行時例外
       */
      public ActionForward executeAction(ActionMapping map,
                                          ActionForm form,
                                          HttpServletRequest req,
                                          HttpServletResponse res,
                                          Connection con)
          throws Exception {

          //HttpServletRequestからHttpSessionを取得します。
          HttpSession session = req.getSession();
          //セッション情報からログインユーザの情報を取得します。
          BaseUserModel usModel =
             (BaseUserModel) session.getAttribute(GSConst.SESSION_KEY);

          //セッション情報からユーザSIDを取得
          int usrSid = usModel.getUsrsid();
          //データアクセスオブジェクトを生成
          UsidSelectGrpNameDao gpDao = new UsidSelectGrpNameDao(con);
          //ユーザが所属しているグループ一覧を取得
          ArrayList<GroupModel> gpList = gpDao.selectGroupNmList(usrSid);

          return map.getInputForward();
      }
  }

UsidSelectGrpNameDao.java

※一部省略しています。

Daoクラスを作成する場合、

必ずjp.co.sjts.util.dao.AbstractDaoを継承してください。

package jp.groupsession.v2.cmn.dao;
  import java.sql.Connection;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.util.ArrayList;
  import jp.co.sjts.util.dao.AbstractDao;
  import jp.co.sjts.util.jdbc.JDBCUtil;
  import jp.co.sjts.util.jdbc.SqlBuffer;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  /**
   * [機  能]所属グループ一覧表示Dao
   * [解  説]
   * [備  考]
   *
   * @author JTS
   */
  public class UsidSelectGrpNameDao extends AbstractDao {

        /** Logging インスタンス */
        private static Log log__
            = LogFactory.getLog(SltUserPerGroupDao.class);
        /**
         * Default Constructor
         */
        public UsidSelectGrpNameDao() {
        }
        /**
         * Set Connection
         * @param con Connection
         */
        public UsidSelectGrpNameDao(Connection con) {
            super(con);
        }
        /**
         * [機  能] ユーザSIDからグループ名とグループIDを取得します
         * [解  説] ユーザSIDを引数で与えると、グループ名とグループIDが取得できます
         * [備  考]
         * @param usid ユーザSID
         * @return ret List GroupModel
         * @throws SQLException SQL実行時例外
         */
        public ArrayList <GroupModel> selectGroupNmList(int usid) throws SQLException {

            PreparedStatement pstmt = null;
            ResultSet rs = null;
            Connection con = null;
            ArrayList<GroupModel> ret = new ArrayList<GroupModel>();
            con = getCon();
            try {
                //SQL文
                SqlBuffer sql = new SqlBuffer();
                sql.addSql("select ");
                sql.addSql("  CMN_GROUPM.GRP_SID as GRP_SID, ");
                sql.addSql("  CMN_GROUPM.GRP_NAME as GRP_NAME, ");
                sql.addSql("  CMN_BELONGM.BEG_GRPKBN as BEG_GRPKBN");
                sql.addSql("from ");
                sql.addSql("  CMN_GROUPM, ");
                sql.addSql("  CMN_BELONGM ");
                sql.addSql("where ");
                sql.addSql("  CMN_BELONGM.USR_SID=? ");
                sql.addSql("and ");
                sql.addSql("  CMN_BELONGM.GRP_SID=CMN_GROUPM.GRP_SID ");
                sql.addSql("order by ");
                sql.addSql("  GRP_NAME ");

                pstmt = con.prepareStatement(sql.toSqlString());
                sql.addValue(usid);
                log__.info(sql.toLogString());
                sql.setParameter(pstmt);
                rs = pstmt.executeQuery();
                while (rs.next()) {
                    ret.add(__getUsidSelectFromRs(rs));
                }
            } catch (SQLException e) {
                throw e;
            } finally {
                JDBCUtil.closeResultSet(rs);
                JDBCUtil.closeStatement(pstmt);
            }
            return ret;
        }
        /**
         * [機  能] 結果をセットします
         * [解  説]
         * [備  考]
         * @param rs ResultSet
         * @return bean GroupModel
         * @throws SQLException SQL実行時例外
         */
        private GroupModel __getUsidSelectFromRs(ResultSet rs)
        throws SQLException {
            GroupModel bean = new GroupModel();
            bean.setGroupSid(rs.getInt("GRP_SID"));
            bean.setGroupName(rs.getString("GRP_NAME"));
            bean.setGrpKbn(rs.getInt("BEG_GRPKBN"));
            return bean;
        }
  }
H2コンソールからデータベースへアクセスする手順

ここではH2 Database Engineに付属のH2 Consoleを使用した新規テーブルやテーブル定義の変更手順を説明します。


手順1 tomcatを停止する

GroupSessionが起動している場合はtomcatを停止させます。

※GroupSessionではDBを組み込み(Enbedded)タイプで使用しているためtomcatを停止させる必要があります。


手順2 H2 Consoleを起動しDBへアクセスする

まず、H2 Consoleの起動を行います。

ここではGroupSessionを配置したディレクトリをC:\GSessionとします。


コマンドライン上で以下を実行してください。


$ java -cp C:\GSession\WEB-INF\lib\h2_1.3.jar org.h2.tools.Console
-webAllowOthers


GroupSessionのバージョンによってH2 Databaseのjarファイル名称
(ここではh2_1.3.jar)が異なる場合があります。

H2 Consoleを起動するとブラウザ上にコンソールが表示されます。

表示されない場合はブラウザの設定でJavaScriptがonになっていることを確認してください。


H2 コンソール


接続情報を指定し接続ボタンをクリックします。プロキシの設定によってコンソールにアクセスできない場合があるので
環境に合わせてブラウザの設定を行ってください。


  デフォルト値 説明
JDBC URL jdbc:h2:GroupSessionインストール先\WEB-INF\db\gs2db\gs2db 接続するDBファイルへのファイルパスを指定します。
ユーザ名 gsession DBへ接続するユーザ名を指定します。
パスワード gsession DBへ接続するパスワードを指定します。

インストールガイドの通りにセットアップした場合のJDBC URLは

jdbc:h2:C:\Program Files\Apache Software Foundation\
Tomcat 6.0\webapps\gsession3\WEB-INF\db\gs2db\gs2db

になります。

手順3 SQLを実行する

実行したい任意のSQLを入力し実行ボタンを押してください。

H2 コンソール


実行ボタンを押すと実行結果が表示され、DBへ反映されます。

H2 コンソール


Copyright 日本トータルシステム株式会社