2012年2月29日水曜日

Windows 7(vista) の機能 拡張子を表示させる


①任意のフォルダーを開く

②左上にある 整理 をクリック




③フォルダーオプションと検索のオプションをクリック


④フォルダーオプションダイアログボックスが表示される


⑤表示タブをクリック


⑥詳細設定下部の”登録されている拡張子は表示しない”のチェックをはずす





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

2012年2月28日火曜日

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

(p22) Webアプリケーションのディレクトリ構造
JSP、HTML、画像、TEXTファイルなどはコンテキスト名(entry)の直下に
配置するとの事で、

①”hello.txt” をテキストどおりに作成して配置する。
②tomcat7/bi/Tomcat7w を右クリックで管理者として実行(A)...
③ブラウザのアドレスに ”http://localhost:8080/entry/hello.txt と入力

するも期待通りに表示されない。
”わかりやすい!” と薦められて買ったテキストの、出だしの一番簡単な
箇所で つまづいていては、”サーブレットを諦めろと” 言われているような
もので、一気にテンションが下がってしまった。

これって、よくあるミスなのではないかと思うが、
 webappsフォルダ内に右クリックで entryフォルダを作成し、
entry フォルダ内でまた右クリックして、”hello.txt” を作成していたのである。
その後にメモ帳で hello.txt を編集して上書き保存し、”hello.txt” が完成
したものと思い込んでいた。
このやり方では、”hello.txt.txt” が作成されてしまうのである。

ファイルの拡張子を最初から表示させておけば陥らないミスであった。


(p37) JAVAファイルの作成
ここでサーブレットコードが出ていて、問題なく動作はしたが、
doGet()メソッド のメカニズムがわからず、先へ進めなくなった。
細かい概念はもう少し慣れてきてからとの考えだったのでしょうが、
サーブレットコンテナについてもう少し情報が欲しかった。
doGet()メソッドは2つの引数を持っています。
1つ目の request インスタンスは、なんとなく クライアントからの
リクエストを元に、この第1引数に収まるのはイメージできるが、
2つ目の response インスタンスの response は、
『サーブレットが処理をした後にクライアントに返すもの』 という
イメージから、
・メソッドは引数にインスタンスが入らないと起動しない。
・第2引数はメソッドが処理をした後に出来上がる。
これまでの学習から、どちらも正しいと思うが、そうだとしたら
矛盾が生じる。

を解消する情報が見つけられなくて、実は3ヶ月くらい学習が停止した。

乱暴なイメージだが、
①クライアント → httpサーバ → コンテナ → doGet()メソッド等


②doGet()メソッド等 → コンテナ → httpサーバ → クライアント

で、データが流れるが、①でコンテナが、リクエスト情報を元に doGet()に
渡す2つのインスタンスを生成し doGet()に渡している。
この際、response インスタンスに関しては、せいぜいクライアントが指定して
いるサーブレットが存在するか?しないか?で、200 とか 404 とか の情報を
持つ、その他は空のインスタンスが生成され doGet()メソッドに渡す。



(p44) コンパイル用バッチファイルの作成
JAVAの開発は eclipse を基本とするため、あまり重要ではないとも思ったが、
基本を確実にしたくてテキスト通り compaile.bat を作成する事にした。

@set CLASSPATH=C:\servletbook\apache-tomcat\common\lib\servlet-api.jar
javac -sourcepath src -d classes src/%1

上記2行をバッチファイルとして WEB-INF フォルダーに配置することで、

javac コマンド発行時に 楽してコンパイルできるというもの、

テキストを読んでいて、そう難しくはない記述なのだったが、実行結果が期待通りにならない。
だいぶ悩んだ挙句、”CLASSPATH"を小文字にしていた事が良くなかったようだ。

表記の通り大文字で書き換えたら解決した。


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

2012年2月27日月曜日

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

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




(p182) 複数の抽出結果を合わせて表示する。
 ①select * from tb1 ; ②select * from tb2 ; の結果を
一度に表示させることを union で実現している。

select * from tb1 union seleect * from tb2 ;


これを見やすくする為、


(select * from tb1) union (select * from tb2) ;


なんて事もできる。



(p184) 3つ以上のテーブルから「union」で集める。

       (select * from tb where bang = 'A102')
union
       (select * from tb where bang = 'A103'
union   
       (select * from tb where bang = 'A104'
union
       (select * from tb where bang = 'A107') ;


と発行する事で、bang で抽出された4つの結果をまとめて
表示させる事ができる。


グループ化して表示させているように見える。


また、


select * from tb where bang not in ('A101') ;


というSQL文も紹介されている。 これは

テーブル内の bang が A101 以外を表示するもの。



select * from tb where in ('A101','A103',104'A','A107') ;

は、見慣れない SQL文 で戸惑ったが、

()内にあるものをグループとみなして、

そのグループに属するレコードの中から抽出するもの

ですね。





(p185) 条件を付けて複数の抽出結果を合わせて表示する。
 
 ① tb から uria が200以上のレコード持つ bang を抽出
 ② tb1 から tosi が35以上のレコード持つ bang を抽出


(select bang from tb where uria >= 200)
union
(select bang from tb1 where tosi >= 35) ;



結果は A101 , A102 , A105 の3件が抽出される。


2つのSQL文の結果を union はつなげて表示させている。


注意したいのが、

①の抽出結果は、A101 , A102 の2件であり、
②の抽出結果は、A101 , A105 の2件である。
合計 4件 が表示されるかと思いきや、
自動的に重複表示を制限しているのである。



重複表示を許す場合(純粋な OR 抽出?)は、

(select bang from tb where uria >= 200)
union all
(select bang from tb1 where tosi >= 35) ;



と、union に続けて all とすれば良い。



大量のデータを処理する場合は、union(重複を省く)では、

処理時間が長くなり、 union all(重複を許す)とすると、


処理時間が短くなる。らしい。




(p188) 複数のテーブルを結合して表示する(内部結合)。

 いよいよリレーショナルデータベース(以降RDB)らしい
内容になってきます。RDB = 複数テーブルを関連づける
という概念ですが、直前の union のところでも、2つのテーブル
(tb と tb1)を使って結果を表示していました。
ちょっと立ち止まり概念を整理したのですが、
union のところでは、2つのテーブルからの抽出結果を
ただ単に連続表示していただけでした。

内部結合 join 句 (※ INNER を指定すると、内部結合を「明示的」に指定できる。)は、
複数テーブルが共通に持つフィールドの値でテーブルを関連
づけ、実在するテーブル(tb , tb1)が持つ情報を、非実在の
テーブル(仮想テーブル)を作成し、それを表示している。

テキストでは、
select * 
    from tb 
join tb1
    on tb.bang = tb1.bang ;  

これは、 テーブル tb の bang と テーブル tb1 の bang が
同一であった場合に、それぞれのテーブルからレコードを
抽出し、全フィールドを結合して一件のレコードとして表示
するというものですね。
 
うまい表現ではないような気もしますが、
1レコード6フィールドの ハードディスクには実在しない
テーブル(仮想テーブル)を画面上に表示します。


内部結合 という事は、 外部結合 もある訳で、その違いを
把握しておきたいところですが、

テーブル tb には bang が A101、A102、A103、A104、A107 
の5種類、計10件のレコードが存在していて、
テーブル tb1 には bang が A101、A102、A103、A104、A105 
の5種類、計5件のレコードが存在している。


先の内部結合のSQL文では、9件のレコードが表示されたが、
bang が A107(tbだけにある) と A105(tb1だけにある) の
レコードは表示されなかった。 内部結合は、片方にしかない
情報は排除し、仮想テーブルには含めないのです。

それに対して、外部結合は片方にしかない情報も
仮想テーブルに 加えます。


    左のテーブル          右のテーブル
  bang   uria  tuki     bang   nama   tosi
  A103  101  4  |   A101   佐藤    40
  A102   54 54  |   A102   高橋    28
  A104  181  4  |   A103   中川    20
  A101  184  4  |   A104   渡辺    23
  A103   17  5  |   A105   西沢    35
  A101  300  5  |
  A102  205  6  |
  A104   93  5  |
  A103   12  6  |
  A107   87  6  |


左外部結合(left join) と 右外部結合(right join)。
inner join の inner を、left または right  に置き換えると、
左(右)外部結合の結果が得られます。

左外部結合とは、左のテーブル(tb)に 右(tb1)にはない
フィールド が存在する場合、そのデータも仮想テーブルに
加えてしまいます。違う言い方をすると、
左外部結合の結果は左テーブルのレコード総てを
仮想テーブルに加えて、右テーブルからは特定のキーに
よって一致するレコードを抽出し仮想テーブルに加える。
という事ですね。


(p194) using を使って on ~ の部分を見やすくする。
 テーブルを関係づけるために、
on tb.bang = tb1.bang (bang)というフィールドの内容が
同一かを判定させる。ここでは たまたま 2つのテーブルで
bang というフィールド名でしたが、
tb では、bang、 tb1 では bangou というフィールド名で
A101 やら A107 というデータを保持させていた場合、
「 on tb.bang = tb1.bangou 」 とすれば、テーブルどうしを
結合させられる。
using 句は、仮に2つのテーブルで、A101 やら A107 の
データを同じフィールド名で管理している場合、
join tb1 on tb.bang = tb1.bang を 
join tb1 using (bang) と簡単に記述できるというもの。




(p195)  
結合したテーブルから「where」で設定した条件で抽出する。
 結合した仮想テーブルから where 条件でレコードを抽出
する際は where句の条件では フィールド名だけではダメ。
必ずテーブル名を指定して MySQL に示してやる必要が
ある。

select tb . bang , tb1 . nama , tb . uria 
         from tb
join tb1
         using(bang)
where tb . uria >= 100




(p 197) たくさんのテーブルのデータを使って抽出する。
 テーブルの結合は2つ以上可能で仮に3つのテーブルを
結合する場合は、

select
       tb.bang,tb.uria,tb1.nama,tb3.ken
from
       tb
join
       tb1
using(bang)
join
       tb3
using(bang)
;
とする。




(p200) 
複数のテーブルの総てのレコードを表示する(外部結合)。
 内部結合(p188)後半の記述を参照。




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

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






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

2012年2月26日日曜日

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

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




(p164) UPDATEコマンド
 テーブルの特定のカラムを指定した値に変更する。書式は、
update テーブル名 set カラム名 = 設定する値 ; で、
一瞬にしてカラムの値が変更される。通常 
where句 と共に使用される為、全レコードの特定カラムを
一気に変更することは少ないらしい。

テキストでは、 tb という既存のテーブルに、
①新しく 「bikou」 というカラムを追加して、
そのカラムに②「特記なし」という文字列を設定している。

① alter table tb add bikou varchar(100) ;
② update tb set bikou = '特記なし' ;





(p167) 条件に一致したレコードだけを修正
 書式は、
update テーブル名 set カラム名 = 設定する値 where 条件 ;
テキストでは、 tb テーブルの uria が 100 以上のレコードの
bikou に 「優秀」 という文字列を設定している。
update tb set bikou = '優秀' whrer uria >= 100 ;



(p169) 売上下位3件の bikou フィールドに 「ガンバレ!」を設定
 uria フィールドの値で、下位3件を抽出はどうする?
① uria フィールドを 「order by」で並べ替える。
  ここでは小さい値から大きい値へ並べ替えられる(内部的に)。
② limit3 で最初の3件を抽出する(下位3件)。

 update tb set bikou = 'ガンバレ!' order by uria limit 3 ;



小生の感覚では、where句 で抽出したくなり、当該コマンドは
しっくりこない。経験を積むことで自然と理解が深まり、違和感が
解消されることを期待し先に進む事とする。


(p171) 特定のフィールドを削除する。
 テキストでは、tb テーブルの bikou フィールドを削除している。
書式は、 alter table テーブル名 drop フィールド名 ;
alter table tb drop bikou ; というコマンドを発行している。



(p171) 条件に一致したレコードをコピーする。
 ①条件に一致したレコードを抽出し、新しくテーブルを作成。
   create table tb_A101 select * from tb 
        where bang like 'A101' ;

 ②条件に一致したレコードを抽出し、既存のテーブルに追加。 
     insert into 既存テーブル名 select * from tb 
                 where bang like 'A101' ;

(p173) レコードを順番に並べてコピーする。
 テキストでは、
① tb テーブルのレコードを uria フィールドの値を基準にして
   降順に並べ替え(order by uria desc)、
②上位4件を抽出している(limit 4)。
③さらに、最上位のレコードを省いて、その代わりに
  uria フィールドが 5番目に大きい レコードを上位4件に
  加えている(offset 1 … 最上位レコードを1つ下のレコード
  とする)。
④手順③までで抽出したレコードを新しいテーブルとして作成。
  create table tb_2to5 select * from tb
                    order by uria desc limit 4 offset 1 ;



(p175) 全レコードを削除する(テーブルは残す)。
 「削除」 といえば DELETE! と閃いた次の瞬間、DROP でも
良いのかなぁ? と 少し ”もやもや” している事に気付く。


テキストにも書いてある通り、DROPテーブルを削除し、
DELETEレコード全部を消去しても、空のテーブルは残る。

※updateコマンドよりも慎重に発行する事が求められる。

さて、特定のレコードを削除する場合の書式は、
delete from テーブル名 where 条件 ; で、
テキストでは、
delete from tb1k where tosi < 30 ; を発行している。
(tb1 と全く同じ tb1k というテーブルをあらかじめ作成しておく)

結果は、tb1kテーブル にレコードは 2件が残る。
(tosi が 30 未満のレコードは削除される)

(p177) テーブルをソートしてから、特定のレコードを削除する。
 テキストでは、テーブル tb 同一内容のテーブル tb_copy が存在している事を前提にしているので、あらかじめ作成しておく。

以下の手順①,②で作成される 【仮想テーブル】 の内容を、
【実テーブル】である tb_copy から削除する。


① テーブル tb_copy の uria フィールドの値を基準に降順に
   ソートする。
② limit 4 で 上位4件のレコードを抽出する。


結果は、6件のレコードだけが tb_copy に残る。


(p179) 期間でレコードを抽出する。
 ここでは、【 now() - interval 5 year 】で、
現在より5年前を表している。 

now() 関数を使わずに interval の使い方を試すことにした。
 条件を 【 '2012' - interval 5 year】 としたら、エラーにはならず、Mysql は 「 Empty ○○○ 」 と返してくる。文法は正しいものと
思い、いろいろ試すも思うような結果が得られない。

結局 '2012'  を 'current_timestamp' とする事で、期待通りの
結果が得られた。

それから、「~ interval 5 years 」 とするとこれはエラーに
なってしまう。英語に精通している小生としては(うそ)。
違和感を覚える。




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

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




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

2012年1月15日日曜日

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

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




(p45) DESC文
 テーブルのカラム構造を確認する。describeを省略させた。


(p73) ALTER TABLE ~ CHANGE ~~~;
 テーブルのフィールド名とデータ型を変更する。
alter table tb1c CHANGE umare seinen DATE;
(umare を seinen)に変更する。DATEは(データ型)は
直感的に省略してしまう。気を付けよう。


(p79) UNIQUE句
 テーブル作成時、フィールドの重複を許さない。
フィールドが主キーではないけれど、フィールドの値を一意に
させたい時に指定する。



(p125) LIMIT句
 画面に表示させたいレコード数を指定する。

(p130) IN句
 IN句はORの役割をする



(p139) CASE式
  SELECT FROM tb; の代わりに、
 SELECT case when ~ then ~ else ~ end FROM  tb;
 とする。 他のフィールドの値を元に、フィールドの設定値を
 変えられる。(uria の値を元に 多い、少ない、等と
 フィールド値を設定。 )


(p143) ORDER BY句
 不規則に表示されるレコード表示に規則を与える。
 ASC … 昇順(省略可)
 DESC … 降順
   ※デスクと覚えた
  ※テーブル構成を表示する DESC とスペルが同一


(P146) OFFSET句
 表示の範囲を限定する。
OFFSET 3 とすると、
最初の 3レコートを消す様にセットする。


(p148) GROUP BY句
  特定のフィールドを(ex,select * from tb group by bang; の
様に)GROUP BY句に続けて指定すると、フィールド(bang)内
で重複する値(同じ値)をグループ化する(distinctみたいだ)。

グループ化することで、グループ毎に ”合計” したり、”平均”
を出したりする事が可能となる。 

(p149) count()関数
 count(x) で フィールド x に存在する個数を調べられる。
㊟nullはカウントされない。
select count(*) from tb group by bang;  で、フィールド bang
でグループ化され、グループ毎の合計値を表示する。
この場合、グループ化したフィールドに null が入っていても
null の個数を表示してくれる。 テーブルのレコード数を知る
ことができるね。 メカニズムは解らない (^^; 


(p152) HAVING句
 GROUP BY句でまとめた値(たとえば、sum(uria))に対して
条件を付加する。
select 
   bang,sum(uria) 
from tb 
  group by bang
having sum(uria) >= 200; は、

bang で グループ化 した uria の 合計値 が、
200以上の グループ のみを 表示するというもの。




複雑な条件(抽出・並べ替え・グループ化)では、


①WHERE条件
②GROUP BY
③ORDER BY ○○(DESC)

の順番となる。




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

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





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

2012年1月11日水曜日

XAMPP のインストール 『ポート80または443(SSL)はすでに利用されています。』解消まで

MySQLの知識を整理すべく、また、PHPを かじろうと

高評判の 『基礎からのMySQL』 西沢夢路著 (ソフトバンク)


を購入した。 初めからこの書を手にしていれば良かったと

思う程、とても解りやすい書籍です。 が、小生のパソコンは

これまでに MySQL や Apache を インストール していた為

(だと思うが)、XAMPPのインストールが うまくいかない。


※インストールの最終段階で『ポート80または443(SSL)は
  すでに利用されています。』のメッセージが表示されて
  しまう。


いろいろ調べると、


① ポート80はSkypeが占有するので予めアンインストール
  する必要があるらしい。


  その情報通りにSkypeをアンインストールし、XAMPPを

  再インストール。結果はまたもや『ポート80または443(SSL)
  はすでに利用されています。』 とアパッチは具合が悪い


② 以前インストールしていたMYSQLやApacheに係わり
  そうなソフトウェア を総べて アンインストール


③ windowsのファイヤーウォールを解除してのインストール


④ IIS とか悪さをしそうなソフトウェアをアンインストール


⑤ マイクロソフトのstudio2008 と visual BASIC を削除



やっと ⑤ で

『ポート80または443(SSL)はすでに利用されています。』

のエラーが解消された。




(※もしかして 管理者権限 でインストールした事が
良かったのかも知れない。)





その後、改めてテキストに沿ってデータベースを作成

してSQLを発行していろいろと試した。


Apache のインストールエラーが あった状態では

なぜか P20 からの My.cnf 設定が思うようにできな

かったが(server character のみがLatin1になってしまう)

それも不思議と解消した。






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

2011年11月12日土曜日

MS Wordの覚えておきたい機能(①タブとリーダー で キリトリ線を作成)

前回は 「タブとリーダーの機能」で目次を作成しましたが、

今回は 同じ機能で キリトリ線 を 作成する方法を記述

しました。 

キリトリ線は 挿入タブ>図>図形>線>直線 そして、

shift + ドラック で真っ直ぐな線を引き、線種の変更 等でも

実現できますが、「タブとリーダーの機能」を理解していれば

あっという間に、且つ、正確にキリトリ線が作れてしまいます。





①の手順は、

 1.「ホーム」タブ選択、
 2.「段落」グループ内の「ダイアログ起動ツール」 を クリック。
   →「段落」ダイアログが表示される。
 3.「タブ設定」ボタン クリック。
   →「タブとリーダー」ダイアログが表示される。
 4.下記 a~c のように設定する。 
    a.タブ位置 …  ”0”
    b.配置    …  左揃え(L)
    c.リーダー …  なし(1) 
 5.「設定」ボタンをクリック。
    →タブ位置の窓に「0 字」と設定状況が表示される。
 6.下記 d~f のように設定する。   
    d.タブ位置 … ”20”
    e.配置    … 中央揃え(C)
    f .リーダー … -------(3)
 7.「設定」ボタンをクリック。
   →タブ位置の窓に「20 字」が追加されれる。
 8.下記 g~i のように設定する。   
    g.タブ位置 … ”40”
    h.配置    … 右揃え(R)
     i .リーダー … -------(3)
 9.「設定」ボタンをクリック。
   →タブ位置の窓に「40 字」が追加される。
 10.「OK」ボタンをクリック。
    →タブとリーダーダイアログが消えます。
 11.任意行 の 0文字目から 「キリトリ」 と入力します。
 12.「キリトリ」 の左にカーソルを合わせ、Tabキーを押下、
    →「キリトリ」が画面中央に移動し、左側には「------」が
    置かれる。
 13.「キリトリ」 の右にカーソルを合わせ、Tabキーを押下、
    →「キリトリ」の右側から画面40文字目まで「-------」が
    置かれる。


 ②の手順は、
   ①の手順が終了した後に、「キリトリ」の前後へ
   半角スペースを置くだけです。 




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