2012年5月26日土曜日

『基礎からのMySQL』 西沢夢路著 (ソフトバンククリエイティブ) 
から得たぜひ覚えたい個所を列挙した。 Part4




(p200) 複数のテーブルのすべてのレコードを表示する(外部結合)。


・内部結合(inner join) 売上テーブル、社員情報テーブルで
 キーが一致しているレコードのみを取り出す。
・外部結合(outer join) 売上テーブル、社員情報テーブルで
 キーが一致していなくても一方のテーブルのレコードは
 すべて取り出す。


外部結合には、結合するときにどちらのテーブルをすべて
取り出すかによって、次の2種類がある。

・左外部結合(left join)
・右外部結合(right join)

左と右はどこで指定しているの?
→select命令で指定している!!


select カラム名 from 左のテーブル
left join 右のテーブル
on 結合条件


select  *  from  tb
left  join  tb1
on  tb.bang  =  tb1.bang


※from 直後で指定しているテーブルが左テーブルですね。


テキストの例だと、左のテーブルにA107(bangフィールド)が
存在するが、右のテーブルには存在しない。
よって、A107の namaフィールド にはNULLが表示される。


右外部結合の場合は、右テーブルにのみ存在する”西沢”
さんのレコードに該当する情報が左テーブルには存在しない
よって、左テーブルが持つ売り上げのフィールド部分は
NULLと表示される。



(p207)COLUMN OUTERを付けた表記

left  join は left  outer  join と記述できる。right も同様。
outer だけの表記はできない。
必ずleft ・ rightを指定する。






(p208) 自己結合


 自己結合の概念がいまいち理解できない。
社員情報テーブル(tb1)の 5件のレコードそれぞれに
社員情報テーブルの1件目のレコードを結合させ表示し
次に、
社員情報テーブルの 5件のレコードそれぞれに
社員情報テーブルの2件目のレコードを結合させ表示し

最終的にレコードの件数分 繰り返し、
レコードの件数 × レコードの件数 分のレコードを
持つ view を作り上げる。


これまでは、bangフィールドなどで同一の値を持つ
フィールドでレコードを結合させていたが、ここでは
存在するレコードの数だけ  ただ  組み合わせている
意味が分からない。

p211までの説明では、順位づけを実現する為の手段
であるように記述されているが、すっきりしない。

p213までの説明を読んでも、自己結合について理解
できない。また、p213の結果もなぜこのように表示される
か理解できない。 
















MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part3)へ

MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part5)へ






情報処理再チャレンジブログ ホーム

2012年4月20日金曜日

インポートされた javax.servlet.http は見つかりません

以前作成したWebアプリを修正しようとして、久しぶりに
Eclipseに読み込んだ。

すると Eclipse がエラーを訴えている。


インポートされた javax.servlet.http は見つかりません

javax.servlet.http の 外部JARファイルの追加は
何をどうしたらよいのか さっぱりわからない。 



ビルドパスの構成



【ビルドパスの構成】 画面をよ~っく見ると、TOMCAT_HOME
の記述がおかしい(Eclipseのバージョンが違っている!)。

これは、小生がEclipseを再インストールしているが、その名残
のようだ。

TOMECAT_HOMEの設定を現在のものに書き換えたら、
エラーが解消された。





情報処理再チャレンジブログ ホーム

2012年4月19日木曜日

Eclipse エラー 解消

「http://java.sun.com/jsp/jstl/core は web.xmlとこのアプリケーションを配備したJARファイルのどちらかでも解決できません」


Eclipseのコンソールに何やら意味不明のメッセージが表示され
思い通りの結果が表示されない。

ググってみると、 jstl.jar と standard.jarの二つのファイルを
EclipseのWeb-INF/lib 内にコピーしなければならないらしい。
※バージョン1.1 以上

ここから、
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

 jakarta-taglibs-standard-1.1.2.zip をクリックすると
 
2つのファイルをダウンロードできます。 

Eclipseのパッケージエクスプローラー内のWeb-INF/lib に
コピーしてトムキャットを再起動すると解決!!
 
 のんきの日記(http://nonki.yoka-yoka.jp/e121918.html)
さんで勉強させてもらいました。


情報処理 再チャレンジブログ ホーム


2012年3月23日金曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その10

(p148) サーブレットフィルタとは

サーブレットやJSP、また、同一Webアプリケーション内で
あればHTML等に共通の前後処理を記述できる仕組み。
たとえば、入力文字エンコーディング。

テキストで javaクラスの配置場所を示している。
これはちと解かりづらいが、Eclipseで開発を行う場合任意の
プロジェクト内にfilterパッケージを作成しその中に記述する
と言うことだろうか。

1.javax.servlet.Filter インターフェイス を実装したフィルタクラスを作成する。
2. web.xmlにフィルタを登録する。



















情報処理 再チャレンジ ブログ ホーム へ

2012年3月22日木曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その9


(p140) 入力チェックを行う

その8ではエラーチェックの無い干支計算プログラムを示したが、
全角で西暦を入力した場合などは、例外が発生してしまう。

テキストでは半角数値以外の文字列が入力された場合に、
エラー処理を行うプログラムが紹介されている。


eto2.jsp

<%@page contentType="text/html; charset=Windows-31J"%>
<html>
<body>
<h2>干支計算
(入力チェック付)</h2>
生まれた年を入力してください。

<form action="../input/EtoServlet2">
    西暦<input type="text" name="year">年 
<%-- *1 --%>
    <input type="submit" value="計算"> <%-- *2 --%>
</form>
</body>
</html>


 <%-- *1 入力された文字列を、変数名 "year" で管理 --%>
 <%-- *2 value属性でボタンに表示する文字列を設定 --%>




EtoServlet2.java

package chapter10;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

public class EtoServlet2 extends HttpServlet {

    final static String[ ] ETOS = new String[ ]  {

       "子(ね)", "丑(うし)", "寅(とら)",
            "卯(う)", "辰(たつ)", "巳(み)", 

       "午(うま)", "未(ひつじ)", "申(さる)", 
     "酉(とり)", "戌(いぬ)", "亥(い)",    };

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        String yearStr = request.getParameter("year");

        String error = null;       // エラーメッセージを管理する参照変数(error)をnullで初期化
        String etoText = null;     //  計算結果(干支)を管理する参照変数(etoText)をnullで初期化

        if (yearStr == null || yearStr.length() == 0) {     //  文字列が入力されたかをチェック
            error = "何か入れてね";           
        }

        if (error == null) {   // 文字が入力された場合
            try {
                int year = Integer.parseInt(yearStr);   //  文字列を数値に変換
                if (year < 0) {                  //
                    error = "紀元前の人はサポート外です";
                } else {
                    int index = (year + 8) % 12;
                    etoText = ETOS[index];
                }
            } catch (NumberFormatException e) {
                error = "年を入れてください";
            }

            response.setContentType("text/plain; charset=Windows-31J");
            PrintWriter out = response.getWriter();

            if (error != null) {
                out.println(error);
            } else {
                out.println("あなたの干支:" + etoText);
            }
        }
    }
}





情報処理 再チャレンジ ブログ ホーム へ

2012年3月21日水曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その8

(p136) 入力チェックと値の変換

サーブレットに渡される入力パラメータは文字列である。
それでサーブレットよっては数値・日付等への型変換が必要になる。
また、正しい値が送られてきているかチェックをする必要がある。

ブラウザ(.jsp)から西暦で4桁の年を入力すると、干支を返すサーブレット(.java)
が紹介されている。

まずは、入力チェックのないプログラム。


eto.jsp
<%@page contentType="text/html; charset=Windows-31J"%>
<html>
<body>
<h2>干支計算</h2>
生まれた年を入力してください。

<form action="../input/EtoServlet">
    西暦<input type="text" name="year">年 
<%-- *1 --%>
    <input type="submit" value="計算"> <%-- *2 --%>
</form>
</body>
</html>


 <%-- *1 入力された文字列を、変数名 "year" で管理 --%>
 <%-- *2 value属性でボタンに表示する文字列を設定 --%>




EtoServlet.java

package chapter10;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

public class EtoServlet extends HttpServlet {



    final static String[] ETOS = new String[] { /* *1 */ 

        "子(ね)","丑(うし)","寅(とら)",
        "卯(う)","辰(たつ)","巳(み)",
        "午(うま)","未(ひつじ)","申(さる)",
        "酉(とり)","戌(いぬ)","亥(い)",
        };


    public void doGet(HttpServletRequest request,HttpServletResponse response)
        throws    IOException,ServletException {

        String yearStr = request.getParameter("year"); 
/* *2 */
        int year = Integer.parseInt(yearStr); /* *3 */

        int index = (year + 8) % 12; 
/* *4 */
        String etoText = ETOS[index];

        response.setContentType("text/plain; charset=Windows-31J");
        PrintWriter out = response.getWriter();

        out.println("あなたの干支:" + etoText);
    }
}



/* *1 String 型のオブジェクトの入れ物をメモリ上に確保し、そこに入る
オブジェクトを定数として管理する為の、ETOS[ ] 配列を宣言している。 */

/* *2  オブジェクト変数( request )が指し示すメモリ上のオブジェクトに格納
されている値を、オブジェクトが持つ getParameter()メソッドで取り出し、
それを String 型のオブジェクトとして改めてメモリ上に生成し、
  オブジェクト変数(yearStr) で記憶させている。  */


/* *3  なぜ8を足しているのかわからない。定石なのだろうか? */






情報処理 再チャレンジ ブログ ホーム へ

2012年3月20日火曜日

tomcat7 tomcat6 での文字化け対処

基礎からのサーブレット/JSP [改訂版] で
サーブレットの学習をしてきたが、
どうしても日本語の文字化けを解消できない。
いろいろ調べてみると、server . xml の 
<Connector> 内に


useBodyEncodingForURI="true" を
 
記述すると良いらしい。
 
 
 上の写真は tomcat6 の server.xml に追記ものです。 
 
記述後、tomcat を再起動したら、
 
日本語が文字化けせずに表示されました。 
で勉強させて頂きました。 
 
  


情報処理再チャレンジブログ ホーム