Struts2.3+S2JDBCのセットアップからDBアクセス(ORACLE)まで - DBアクセス編 ホームページ制作 | 墨田区

Struts2.3+S2JDBCのセットアップからDBアクセス(ORACLE)まで – DBアクセス編

LINEで送る
Pocket

Struts2.3+S2JDBCのセットアップからDBアクセス(ORACLE)までの方法をご紹介します。以前、こちら のページでは、Struts2.3 にアップデートし、動作するところまで確認しました。
Struts2.3+S2JDBCのインストールからDBアクセス(ORACLE)まで – 準備編
Struts2.3+S2JDBCのセットアップからDBアクセス(ORACLE)まで – アップデート編

今回は、S2JDBC を使ってOracle にアクセスするところまで確認したいと思います。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


Oracle のインストール

Oracle を利用しますので、インストールする必要があります。
こちら のページを参考に、Oracle をインストールしましょう。
※Oracle IDが必要です。お持ちでない方はこの機会に登録しておきましょう。
Oracle 11g を Windows に インストール


jdbcドライバ(ojdbc6.jar)のダウンロード

Oracle にアクセスすることが目的ですので、Oracle が提供している jdbc ドライバをダウンロードします。
Oracle Database 11g Release 2 JDBC Driver Downloads
※Oracle IDが必要です。お持ちでない方はこの機会に登録しておきましょう。
Accept License Agreement にチェックを入れ、 ojdbc6.jar をダウンロードします。

ダウンロードしたら、 strtus2-s2jdbc 内、「src」-「main」-「webapp」-「WEB-INF」-「lib」の中にコピーします。
コピーしたら、プロジェクトを選択して、プロパティを開きます。
「Java のビルド・パス」を選択し、JARの追加から、ojdbc6.jar を追加します。
ojdbc6.jar ビルドパス追加
ビルド・パスに追加されたら OK を押下して画面を閉じます。


jdbc.dicon の設定

データベースへの接続先情報を記述する jdbc.dicon を編集します。
様々なデータベースにアクセスできるよう、サンプルが書かれていますが、今回は Oracle にアクセスすることが目的なので、不要なものは削除します。
以下のように書き換えてください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  "http://www.seasar.org/dtd/components24.dtd">
<components namespace="jdbc">
  <include path="jta.dicon"/>

  <!-- for Oracle -->
  <component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
      "oracle.jdbc.driver.OracleDriver"
    </property>
    <property name="URL">
      "jdbc:oracle:thin:@127.0.0.1:1521:orcl"
    </property>
    <property name="user">"SAKAEN"</property>
    <property name="password">"pass1234word"</property>
  </component>

  <component name="connectionPool"
    class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
    <property name="timeout">600</property>
    <property name="maxPoolSize">50</property>
    <property name="allowLocalTx">true</property>
    <destroyMethod name="close"/>
  </component>

  <component name="DataSource"
    class="org.seasar.extension.dbcp.impl.DataSourceImpl"
  />
</components>

IPアドレス:ポート番号:SIDと設定

"jdbc:oracle:thin:@127.0.0.1:1521:orcl"

@以降、IPアドレス:ポート番号:SIDと設定をします。


ユーザーIDとパスワードを設定

<property name="user">"SAKAEN"</property>
<property name="password">"pass1234word"</property>

ユーザーIDとパスワードを設定します。


s2jdbc.dicon の設定

ORACLE を利用しますので dialect は、oracleDialect を利用し、他は削除します。
以下のように書き換えてください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <include path="jdbc.dicon"/>
  <include path="s2jdbc-internal.dicon"/>
  <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
    <property name="maxRows">0</property>
    <property name="fetchSize">0</property>
    <property name="queryTimeout">0</property>
    <property name="dialect">oracleDialect</property>
  </component>
</components>

テーブルを作る

ORACLE PL/SQL の CREATE TABLE コマンドを使って、テーブルを作ります。
以下の コマンド を実行します。

CREATE TABLE EMPLOYEE
(
    EMPLOYEE_CODE                  NVARCHAR2(5) NOT NULL,
    EMPLOYEE_NAME                  NVARCHAR2(50) NOT NULL,
    PASSWORD                       NVARCHAR2(50) NOT NULL,
    OFFICIAL_POSITION              NVARCHAR2(50) NOT NULL,
    EMAIL_ADDRESS                  NVARCHAR2(255) NOT NULL,
    SALARY                         NUMBER(18,2) NOT NULL,
    CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMPLOYEE_CODE) USING INDEX
)
/

データ投入

何件かデータを入れておきましょう。
以下の INSERT コマンド を実行します。

INSERT INTO EMPLOYEE values('00001','墨田 太郎','password1','Chief Executive Officer','taro.sumida@saka-en.com','150000000')
/
INSERT INTO EMPLOYEE values('00002','墨田 次郎','password2','Chief Operating Officer','jiro.sumida@saka-en.com','100000000')
/
INSERT INTO EMPLOYEE values('00003','墨田 三郎','password3','Chief Technology Officer','saburo.sumida@saka-en.com','50000000')
/
INSERT INTO EMPLOYEE values('00004','墨田 四郎','password4','Chief Information Officer','shiro.sumida@saka-en.com','50000000')
/

んんー、すごいお給料ですね^^;


JUnit のダウンロード

JUnit をダウンロードします。
ダウンロードファイル一覧 – JUnit – SourceForge.JP
ここでは junit-4.10.jar をダウンロードします。
※Junit をビルドパスに設定しておかないと、S2TestCase でコンパイルエラーが発生します。

ダウンロードしたら、 strtus2-s2jdbc 内、「src」-「main」-「webapp」-「WEB-INF」-「lib」の中にコピーします。
コピーしたら、プロジェクトを選択して、プロパティを開きます。
「Java のビルド・パス」を選択し、JARの追加から、junit-4.10.jar を追加します。
junit-4.10ビルドパス追加


s2jdbc-gen-build(Ant)の実行

データベースの環境が出来上がったところで、s2jdbc-gen-build(Ant)を実行します。
プロジェクト直下の s2jdbc-gen-build.xml を右クリックして、[実行] – [外部ツールの構成] を選択してください。
s2jdbc-gen-build.xmlを右クリック

新規ボタンを押下します。
s2jdbc-gen-build.xml 新規
Ant ビルドの中に、struts2-s2jdbc s2jdbc-gen-build.xml が出来上がります。
[ターゲット]タブを選択し、gen-entity にチェックを入れ、gen-ddl(デフォルト) のチェックを外します。
gen-entityを選択

下の実行ボタンを押下すると、Ant が実行されます。
コンソールにログが次々と出てきますが、BUILD SUCCESSFUL と出れば成功です。
entity パッケージと service パッケージの中にソースが自動生成されています。
自動生成されたentiyクラスとserviceクラス



EmployeeServiceへ追加

自動生成された EmployeeService にメソッドを追加します。
これは、認証用の SQL を実行するためのものです。

public Employee findByEmployeeCodeAndPassword(String employeeCode, String Password) {
    return select().where(
        new SimpleWhere()
        .eq("employeeCode", employeeCode)
        .eq("Password", Password)
        ).getSingleResult();
}

LoginActionの変更

これまでは、リテラル値でチェックしていましたが、データベースへアクセスし、認証をおこないます。認証が OK であれば、 EmployeeName をセッションに保存します。

package sakaen.action;

import java.util.Map;

import org.apache.struts2.config.Result;
import org.apache.struts2.dispatcher.ServletRedirectResult;
import org.apache.struts2.interceptor.SessionAware;

import sakaen.entity.Employee;
import sakaen.service.EmployeeService;

import com.opensymphony.xwork2.ActionSupport;

@Result(type = ServletRedirectResult.class, name="main", value = "main.action")
public class LoginAction extends ActionSupport implements SessionAware {

  public String userId;
  public String password;
  public String message;
  public Map<String, Object> sessionMap;
  public EmployeeService employeeService;  // 追加

  public String execute() throws Exception {
    this.sessionMap.put("userId", null);
    return "success";
  }

  public String login()  throws Exception {
    System.out.println("userId: " + this.userId);
    System.out.println("password: " + this.password);
    this.message = "";
    //if ( !"saka-en".equals(this.userId) ) {
    //  message = "UserId は saka-en と入力してください。";
    //  return "error";
    //}
    //if ( !"password".equals(this.password) ) {
    //  this.message += "Password は password と入力してください。";
    //  return "error";
    //}
    Employee employee = employeeService.findByEmployeeCodeAndPassword(this.userId, this.password);
    if ( employee == null ) {
      message = "UserId、Password が間違っています。";
      return "error";
    }
    this.sessionMap.put("userId", this.userId);
    this.sessionMap.put("employeeName", employee.employeeName);
    return "main";
  }

    public void setSession(Map<String, Object> sessionMap) {
        this.sessionMap = sessionMap;
    }

}

MainAction の変更

アップデート編では、UserId を表示するだけでしたが、今度は EmployeeName を表示してみましょう。LoginAction でセッションに保存した EmployeeName を取得します。

import java.util.Map;

import org.apache.struts2.config.Result;
import org.apache.struts2.dispatcher.ServletRedirectResult;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

@Result(type = ServletRedirectResult.class, name="main", value = "main.action")
public class MainAction  extends ActionSupport implements SessionAware {

  public String userId;
  public String employeeName;
  public Map<String, Object> sessionMap;

  public String execute() throws Exception {
    userId = (String)this.sessionMap.get("userId");
    employeeName = (String)this.sessionMap.get("employeeName");
    return "success";
  }
  public void setSession(Map<String, Object> sessionMap) {
        this.sessionMap = sessionMap;
    }
}

main.jspの変更

EmployeeName を表示するよう変更します。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Welcome Struts2 ver 2.3.16</title>
</head>
<body>
  <div id="container">
    <div id="page-header">
      <h1>Welcome Struts2 <small>ver 2.3.16</small></h1>
    </div>
    <ul>
      <li>UserId: <s:property value="userId"  /></li>
      <li>EmployeeName: <s:property value="employeeName"  /></li>
    </ul>
  </div>
</body>

検証

それでは、http://localhost:8080/struts2-s2jdbc/index.action にアクセスしてみましょう。
Struts2.3+S2JDBC ログインページ

まずは、何も入力せずに Login ボタンを押下してみましょう。


Struts2.3+S2JDBC ログイン認証エラー
おお、予定どおりエラーメッセージが表示されましたね。

では、UserId に 00001、Password に password1 を入力してみましょう。
Struts2.3+S2JDBC メインページ
おおお、メインページに遷移して名称が表示されましたね。


まとめ

S2JDBC を使えばデータベースのアクセスがサクサクできます。
一度「流れるようなインターフェース」に慣れると、簡単な SQL を記述するのが面倒になりますね^^
とはいえ、実務では厄介な SQL を作成しなければならないケースもあります。
その時は、無理して「流れるようなインターフェース」を使わずに、SQL 文を書いた方がよいと思います。
※S2JDBC には、外部 SQL ファイルの読み込みも可能です。


次回は、Flex4 との連携を予定しています。

おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Javaの勉強が思うように進まないときは!

Javaの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Javaコースあり!オンライン完結型 テックアカデミー TechAcademy [テックアカデミー]

どこかに通う必要なく、自宅でプログラミングやアプリ開発を学ぶことができるのが特徴のスクールです。未経験からプロになるまで最短4週間という、超短期集中型の学習ができます。年齢層は10代〜40代の男女が中心で、学引があり多くの学生が受講しているそうですよ。オンラインで受講ができるスクールですので、全国どこからでも学習ができますね。

更にさらに、パーソナルメンターにチャット質問できちゃうんです!!

これは素晴らしいことですよ!ハマったり困ったことが起こるのがプログラミングの世界。知っている誰かに聞けば数分で解決することが、自分だけだと何時間もかかったりしますから!いや、これホントですよ。

しかし、便利な世の中になりましたよねー。一昔前ではオンラインで学習できるなんて、思いもよりませんでしたから。講師もバリバリのエンジニアですので、現場で使えるスキルを教えてもらえます。なんとも素晴らしいスクールがあったものですね。学割を使えば社会人より半額以下で受講できますから、学生さんには超おすすめです。

これから Java プログラミングを勉強して、将来はプログラマーとして活躍したいと思っている方には、就職保証付きJavaエンジニアコース というのがおすすめです。就職先まで保証してくれるとなれば、もう安心して学習に専念できますね。夢への第一歩はここから始まるのかも。あ、将来はライバルですね^^

オンラインスクールですから営業エリアは全国です。
気になる方は一度チェックしてみてください。無料の動画説明会も常時開催していますよ。


Javaコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL