スポンサーサイト

[ - ]

一定期間更新がないため広告を表示しています

2010.04.21 Wednesday  | - | - | 

簡易WEBアプリ/PHPクラスファイル

[ IT情報 ]
競馬簡易WEBアプリケーション

■45分クッキング!簡易WEBアプリ

現在、WEBを勉強している生徒さんが「競馬予想を毎日更新できるポータルサイトを作りたい」と言っていたので、簡単に動的部分を含めたサンプルを作成することに・・・。競馬のことはわかんないですが、プログラムはわかるので仕様書?(※生徒さんのメモ用紙)にのっとって早速作成!
上記イメージにあるようにPHPとMySQLを使って、「管理ログイン」⇒「予想場入力フォーム」⇒「データベース情報を取得」という会社の勤怠管理システムでもあるような簡単なDB登録システムを作成。データベース接続部分は現在「別途作成中のコンテンツ」でクラス化しておいたものを引用したので、45分という短時間で作成することができました。そんなわけで、今度は、これを生徒さんが1人で作れるように指導しています。DB部分(SQL操作)は前回の少人数で一通り行って理解されているので、今度はプログラム部分をがっちりと。そんなわけで、今回は上記の競馬システムでも使用したDB接続用のクラスのソースを公開しつつ、サーバサイド技術であるJAVAとPHPのMVCモデルについて簡単に説明していきます。


■サーバサイドJAVA(MVCモデル)

JAVA(MVCモデル)

WEBサーバ上で動作するプログラムにJAVA(JSP/サーブレット)がありますが、JAVAプログラムでよく用いられる方法が「MVC」という言われるモデルです。MVCとは「Model」、「Controller」、「View」の略で、処理を3つに分けることで、ソースを見易くして効率良くWEBサイトを構築することを目的としたものです。クライアントサイドで「HTML」、「CSS」、「JavaScript」を目的に応じて外部ファイルに指定するようなイメージを思い浮かべると分かりやすいかも・・・。それぞれの役割は以下になります。

◎Model(モデル)
定期的な処理を記述する際に使用。プログラム内で何度も使い回しをする処理に向いており、例えばWEBプログラムからデータベースに接続する記述など、ルーチン化しておくことで、毎回毎回接続情報を記述しなくて済みます!AJAXで使用する「prototype.js」みたいな一種のクラスライブラリです。

◎View(ビュー)
WEBページの表示を担当。サーバーサイドJAVAでは、ユーザーの処理を受け付けるために、サーブレットとJSPと呼ばれる手法が用いられますが、どちらも似たような処理が
可能です。以下のプログラムソースの左側が「サーブレット」で、右が「JSP」です。両方とも似たような処理が可能で、サーブレットがプログラム内にHTMLタグを記述するのに対し、JSPはHTMLにプログラムを記述をする形になります。ソースの見易さやHTMLに慣れた人なら断然JSPが優位です。

◎Controller(コントローラ)
JAVAの制御・リクエスト処理を担当。Viewのところで、JSPはソースが読み易いと書いたんですが、反面サーブレットに比べて初回起動時の処理が遅いのが難点。なので、MVCモデルでは、制御処理(※フォームのリクエスト処理など複雑な部分)はサーブレット(Controller)で記述して、それをJSP(View)側で呼び出すのが一般的です。例えば以下の、JSP側の<% title %>という部分の処理をサーブレット側で記述することで役割分担させ且つ効率良く記述することができます。


サーブレット/JSP

■PHP(MVCモデル?)

というわけで、ここまでサーバサイドJAVAにおけるMVCモデルの説明だったんですが、今回、PHPでも似たようなことできるじゃんと思ったので紹介します。今まで、PHPでも「View」と「Controller」の分離はSmartyテンプレート(※カスタムブログでもある、<h1>{$title}</h1>みたいな記述)を使えば容易にできるのは知ってましたが、今回は、JAVAのMVCモデルをヒントに、データベース接続などの定型処理に使用する「Model部分」をPHPで作成しました。JAVAのMVCモデルにのっとって役割分担させると以下のようになります。


PHP(MVCモデル)

■外部クラスでソース30%OFF

以下のソース左側も右側も同様にPHPからMYSQLに接続するという処理を記述した例ですが、右側がデータベースの接続部分をクラス化したものになります。クラスファイルを「require」「include」を使用して外部から読み込ますことでソースが30%削減されてかなりすっきりしました!!
接続部分を呼び出す形になっているので、あとは、目的に応じて、カラム用の配列を指定したり、SQL文を記述すればOK。


ソース30%OFF

■外部「iniファイル」でセキュリティ強化

というわけで、以下が定型となるデータベース接続部分を記述したクラスファイルになります。クラス化しておくもう一つ利点として、データベースの接続部分(ホスト名やパスワード)等を外部ユーザーが変更させないようにカプセル化(隠蔽)するところにあります。さらに今回、接続情報を別途「.ini」ファイルに定義することで二重の隠蔽を行なっています。このユーザー情報を定義した「.ini」ファイルをApache内の隔離された場所に配置すれば、さらなるセキュリティ強化にも繋がります。


外部クラスと外部ini
2007.06.28 Thursday 02:00 | comments(0) | trackbacks(8) | 

オラクルプラチナ試験とデータベース特別授業

[ IT情報 ]
オラクルマスター10gプラチナ

最近グルメネタが連続したので、久々にIT情報ネタを!!
今回は、オラクルマスタープラチナ試験とデータベース講座の告知などを・・・。

オラクルといえばデータベースの中で最も普及している製品です。身近なところだと銀行ATMや病院の予約システムなどで利用されています。国内の大手企業でもNEC、NTT、リクルートなど多数の採用実績があります。

オラクルマスター試験は、オラクル製品の技術力と知識を認定する資格です。難易度によりブロンズ→シルバー→ゴールド→プラチナというすみわけがあります。

私も昨年ゴールドver.10gまで取得したんですが、最高ランクであるプラチナはまだ取得していない状態。
とにかく難しい試験であり、日本国内でも、

◆9i(Platinum)の合格者が150名前後
◆10g(Platinum)の合格者が40名前後


と完全実技試験による非常に合格者の少ないIT試験です。
また試験費用も半端なく、受験するのに最低でも65万円(講習2科目+実技試験料)かかる高価な試験でもあります。

実機テストってこともあり、暇があればオラクルインストールしていじったりしてるんですが、なんと今日は現役オラクル社の社員であり「オラクルマスター・プラチナ9i」取得者の生徒さんにお会いすることができました。


そんなわけで、早速もってオラクルプラチナ話に花が咲き。次のようなやり取りに・・・。

(※以下、オラクルプラチナ試験情報を議事録風に☆■赤字は生徒さんです。)


■ORACLE MASTER Platinum試験話

「プラチナって2日間ぶっ通しでSQL叩く試験と聞いたんですが」

「その通りです。たいへんでした〜(苦笑)」

「やっぱ噂どおりですね。そういえば、リカバリやバックアップのシナリオも当然試験に組み込まれてるはずですが、RMANコマンドって全部覚える必要あるんですか?」

「マニュアルが一応ついてるので全部覚える必要ないです!ただ、マニュアル全部英語なので死にましたが・・・」

「やっぱ英語何ですね〜!。そういえば、本試験ってローカルサーバ2台(UNIX)とアメリカにあるリモートサーバー2台(Linux)の計4台で行われるって聞いたんですが・・・!」

「それは、たぶん10gの場合です。データウェアハウス構築のシナリオとかあるので・・・。9iはローカルだけの実施でしたが、そのかわり、10gみたいにOEM(GUI)が使えないので全てコンソール作業でした。」

「なるほど、たしかにデータウェアハウスのシナリオなら、ストリームレプリケーションやDataPumpで使うかも。あとは、リスナーフェイルオーバー接続でリモートサーバーを使いそうですね。って、9i試験はGUI使えないからほんと酷っすね。」

「そうですね、10gならRAC構築時のASMインスタンス構成なんてもろにそうじゃないですか。私は9i試験だったのでRACはなかったんですが・・・。」

「ASMですか!GOLD10gでもインスタンス構成からやった記憶が・・・復習しなくてわw。やっぱ、プラチナ10gも今後受けますか??」


「いえ、プラチナ試験はもう、2度と受けたくないないです(苦笑)」


■ORACLE11gリリース話

で、その後は間もなくリリースされる「Oracle11g」の話を伺ってみることにw

「そういえば今夏リリースされるver11gってオンライン・ホット・パッチングが目玉ですよね」

「そうですね、DBAに取っては嬉しい措置かもしれません。」

「たしかに、また1つ仕事が楽になりそう。楽になるといえば、11gからは、10gまでのFlashback機能を拡張したFlashback Data Archive技術に対応し、選択したテーブルの変更履歴を長期に渡ってアーカイブできるようですね。ヒューマンエラー対策に最適かも!」


「そうなんですよ。そこも拡張されたとこです・・・ってそれにしても情報収集早いですね!うちきません!?」

「え!!・・・へ、ヘッドハンティング(笑)・・・・(汗。と、ともかく11gの営業活動ってもう始まってますか?Release3でたばかりだけど、どうなんでしょう」

「そうですね〜、これからです(^^」

とかなんとか冗談話を交えつつ、オラクル話でかなり盛り上がりました。

それにしても、やっぱPlainumは難しいみたいです。正確なオーペレーション技術に加えて瞬時に英文翻訳できるくらいのスキルを要します。う〜ん、まだまだこれからがんばらなくてわ!!で、プラチナまで取得したら、行き着く先としては「Oracle Excellent Instructor of the Year賞」とかも目指してみたいっすね!



■データベース特別授業告知

というわけで、今月末にデータベース特別授業を実施します。前回TCP/IPやったんですが、やっぱネットワークより直感的に分かるDBの方がやりやすいです。

内容としては『データベースって何?』ってくらいのところから開始するので、WEB講座を受講していてデータベースも知っておきたいという方にもおすすめ。授業内容詳細は以下になります。

▼タイトル
『初心者歓迎!データベース特別講座』

▼場所/日時
蒲田校/5月27日(日)13:00〜(※若干の延長あり)


▼対象生徒
 ・データベース講座受講者でSQLを基礎から復習したい方
 ・WEBプロ受講者でデータベースに興味のある方

▼内容(授業フロー)
初めてデータベースに触れる方を対象としたもので、以下のようなシナリオで講義とSQL演習を検討しています。

【講義内容】

・データベースとは何か
・身の回りで利用されているデータベース
・情報とデータの違いとは
・オープンソース製品とベンダー製品
・WEB2.0におけるデータベースのニーズ
・DBAとWEBプログラマーの仕事
・オラクルマスター10g試験概要


【SQL演習内容】

Oracle10gSQL基礎汽譽戰襪隆蔽韻SQLコマンド演習後に時間があれば、WEBアプリケーションでデータベースを動かすところまでを予定しています。(※MYSQL使用)

・リレーショナルデータベースの説明
・SELECT文
・データ制限ソート(ワイルドカード検索など)
・単一行関数/グループ関数
・表の作成(DDL)とデータの挿入/更新/削除(DML)
・トランザクション制御(COMMIT/ROLLBACK)
・オブジェクトの追加(制約・索引)
・WEBアプリケーション上でのデータベース操作

※時間制約があるので若干内容に変更があるかもしれません。

今回のSQL演習で使用するMYSQLサーバは、こちらで作成したブラウザ上でシェル操作できるWEBアプリケーションを使用するので、MySQLアカウントを取得してない方でも大丈夫です。(※以下SQLアプリケーションのサンプルです)


SQLコマンド演習アプリ
2007.05.12 Saturday 09:46 | comments(0) | trackbacks(5) | 

IBM DB2 ver.9 によるXML-DB構築例

[ IT情報 ]
データベース分類図

中途半端な時間に目が覚めてしまったので、パソコンの電源をポチッ!
というわけで、前回の続きとして、再びXML-DBについて触れていきます。前回はXML版SQL言語(通称:XQuery)と呼ばれるデータベース検索を試したんですが、今回は実際に「衣類商品を扱うWEBショッピング」を題材にXMLデータベースを構築して検索利用するところまでやってみました。(うん、やばい、もう朝だ・・・orz)。
特にショッピングサイトなどは商品の追加や価格の変更といった個々のデータの更新頻度が高いので、XMLのような柔軟なデータ構造を持った形式(半定型文書)が最も適しているといえます。

先ず、上記のデータベース分類図を見てもわかるように、今最も注目されているデータベース形態として「ハイブリッドXML型データベース」と呼ばれるモデルがあります。定型的な部分(IDや見出し文章)は従来のリレーショナルな方式(表形式)をとり、個々に更新が発生する半定型な部分(商品名や価格)の管理はXMLによる階層データを用いた形態です。これにより、検索性能と更新性能が格段にアップし、尚且つプラットフォーム間のデータ移動も簡単に行うことが可能です。
で、このハイブリッド型データベースなんですが、数あるデータベース製品(ORACLE、MySQL他)の中で現在、最もサポートが充実しているのがIBMのDB2と呼ばれる製品で、サポート以外のライセンス料(5名分)もORACLE10gでは¥9,3000するのに対し、DB2は¥1,8900と価格が安価なのも特徴!

というわけで以下、DB2コマンドを交えながらXML-DB構築例を記載します。


-------------
/* DB2起動 */
-------------

START DATABASE manager

---------------------
/* 新規XML-DB作成 */
---------------------

CREATE DATABASE XMLDB USING CODESET UTF-8 TERRITORY JP

----------------
/* XML-DB接続 */
----------------

CONNECT TO XMLDB

----------------------------
/* XML-DB新規テーブル作成 */
----------------------------

CREATE TABLE item (no INTEGER,xmlitem XML)

----------------------
/* テーブル構造確認 */
----------------------

DESCRIBE TABLE item


ここまでがDB2を初期起動して表構造を作る一連の流れです。ORACLEやMySQLなど何らかのリレーショナルデータベースに触れた方であれば、操作そのものはほとんど変わらないので、問題なく対応できると思います。上記のXMLデータベース作成時に文字コードを「UTF-8」に指定したんですが、基本的にXMLデータの取り扱う文字コードがUTF-8とUTF-16に対応している為、あらかじめこのコードをセットしました。
というわけで、次はいよいよデータベースにXMLデータを格納する作業です。


-------------------
/* XMLデータ挿入 */
-------------------


INSERT INTO item VALUES (1, XMLPARSE(DOCUMENT
'<?xml version="1.0"?>
<アイテム>
<商品 id="10000">横浜Tシャツ(長袖)</商品>
<価格>1000</価格>
<サイズ>S</サイズ>
<サイズ>M</サイズ>
<サイズ>L</サイズ>
<色>黒</色>
<色>赤</色>
<色>青</色>
</アイテム>
'PRESERVE WHITESPACE))


INSERT文実行例

上記図からも分かるように、ハイブリッドデータベースではSQLのINSERT文にそのまま、格納したいXMLデータを入れてやるだけで表内にXMLデータを格納することが可能です。また、HTMLと比較した際のXMLの最大の特徴としてタグ名を自分で自由に決めれる(メタデータである)ので判読性も高く、自分の意図に応じて自由にデータ構造を作ることができます。

では続いて、INSERT(挿入)以外のDML文(データ操作言語)である、UPDATE(更新)とDELETE(削除)を実行してみます。文字の黄色くなっている部分が、上記のINSERT文の表示と比較した際のデータの変更箇所です。


-------------------
/* XMLデータ更新 */
-------------------


UPDATE item SET xmlitem = XMLPARSE(DOCUMENT
'<?xml version="1.0"?>
<アイテム>
<商品 id="10000">東京Tシャツ(長袖)</商品>
<価格>5000</価格>
<サイズ>S</サイズ>
<サイズ>M</サイズ>
<サイズ>L</サイズ>
<色>黒</色>
<色>赤</色>
<色>青</色>
</アイテム>
'PRESERVE WHITESPACE)
WHERE no = 1


UPDATE文実行例

-------------------
/* XMLデータ削除 */
-------------------


DELETE FROM item WHERE no = 1


(※DELETE文なんですが、ORACLEだと"FROM句"を省略できるんですが、DB2は省略できないようです)

とりあえず、ここまでがデータの「挿入」、「更新」、「削除」といったデータベースの基本的なDML文なんですが、INSERT文を見ても分かるように、1個1個データを格納していくとかなりめんどくさい作業になります。
そこで、便利な方法として次に「IMPORT」文を紹介します。これは別途用意しておいたXMLデータファイルをまとめでデータベース内に流しこむことができる、たいへん便利な方法です!例えば、OFFICEの「WORD」や「EXCEL」なんかでデータファイルをXML形式のフォーマットで保存して、それをインポート文で流しこむだけで、構造化された文章が意図も簡単にできてしまいます。というわけで以下IMPORT文の実行例になります。



---------------------------
/* XMLデータ一括インポート */
---------------------------


IMPORT FROM D:¥XML¥impfile.txt OF DEL XML from D:¥XML INSERT INTO item


IMPORT文実行例1
IMPORT文実行例2

上記例では個々のXMLファイルをimpfile.txt(※.delでも可)にリスト情報として書き込んで、いわゆる定義文書化(スキーマ化)してデータベースに流し込んでみました。

というわけで、IMPORT文を紹介したんですが、次はその逆にEXPORT文を実行してみました。名前の通り、データベース内のXMLデータファイルを逆に外部に書き出してやることができます。これにより、万が一誤ってデータ削除した時などに備えたデータのバックアップや他のプラットフォームやデータベースへのデータ移動を行うことができます。


-----------------------------
/* XMLデータ一括エクスポート */
-----------------------------


EXPORT TO D:¥XML2¥impfile.txt OF DEL XML TO D:¥XML2 XMLFILE ExpItem MODIFIED BY XMLINSEPFILES SELECT * FROM item


EXPORT文実行例

ここまでの作業で、一通りデータベースが完成したので、最後にここまでに作成したXML-DBに対して、検索をかけて見たいと思います。
前回も説明したんですが、XMLデータベースを検索するときは、XQUERYと呼ばれるXMLデータへの問合せ方法を使用します。というわけで、以下XQUERYを使用した検索例をいくつか紹介します。


---------------------------------
/* XQUERY検索例 〜全列検索〜 */
---------------------------------


XQUERY db2-fn:xmlcolumn("ITEM.XMLITEM")%


XQUERY実行例1

----------------------------------------------
/* XQUERY検索例 〜条件指定検索例〜 */
----------------------------------------------


XQUERY db2-fn:xmlcolumn('ITEM.XMLITEM')/アイテム[サイズ='XL' and 色='赤']/商品%


XQUERY実行例2

----------------------------------------------
/* XQUERY検索例 〜全列検索SQL文使用用例〜 */
----------------------------------------------


XQUERY db2-fn:sqlquery("select xmlitem from item")%


------------------------------------------
/* XQUERY検索例 〜COUNT関数使用例〜 */
------------------------------------------


XQUERY count (db2-fn:xmlcolumn('ITEM.XMLITEM')/アイテム[サイズ='XL']/商品)%


---------------------------------------------
/* XQUERY検索例 〜SQL文使用条件検索例〜 */
---------------------------------------------


SELECT c.xmlitem FROM item c WHERE
xmlexists('$i/アイテム[商品="横浜Tシャツ(長袖)"]'
passing c.xmlitem as "i")%


-----------------------------------------
/* XQUERY検索例 〜SQL文応用検索例〜 */
-----------------------------------------


XQUERY
declare default element namespace "http://posample.org";
for $d in db2-fn:xmlcolumn('PRODUCT.DESCRIPTION')/product/description
let $p := $d/price
where $p > 10
return
<ret>
{$d/name, $p}
</ret>
%


今回はXMLデータベースを作成して検索をかけて利用するところまでやってみました。なんか、ちょっとしたマニュアル文書を1冊作った的な勢いです・・・。

次回は関数や、データ結合なんかを利用した応用例を実践し、最終的にアプリケーションプログラムからデータを引っ張れるとこまでやりたいんですが、それは後々(汗)

さて、時刻は5:00AM!!今日もリポピー飲んで一日のりきります(@_@;

2007.02.27 Tuesday 05:24 | comments(0) | trackbacks(0) | 

IBM DB2 ver.9 によるXQuery検索

[ IT情報 ]
DB2 ver.9インストール画面

今日でなんとかドクターストップ期間も終了。熱もすっかり下がり明日から気合十分で仕事に望めます。本当にお騒がせ致しました。
前回の記事にあるように今日は朝方からコンテンツを作成してたわけですが、どうもカフェでないと集中力切れるようで・・・気分転換に別作業を!!

タイトルにもあるように、DB2を使ったXQuery検索というものに挑戦してみました。これは毎月定期購読しているDB Magazineに特集されていたもので、今年の1月にXQuery(XMLによる検索技術)が策定からようやく勧告案に達し、恐らくこれから本格的に普及するであろうと思い挑戦してみました。
(※実際大企業のアプリケーションなどでは一部利用されているようです。)

使用するデータベースはXQueryに対応してれば何でもいいと思いますが、DB2にあるサンプルデータベースに、はじめからXML形式ツリーデータが格納されていたので今回はそれを使用しました。ちなみに、DB2についててすが、IBM社が大規模用に開発した製品でデータベース全体のシェアとしては、オラクル社のORACLE、マイクロソフト社SQLServerに続いて高いシェア誇る製品です。

そんなDB2(最新版はver9)を早速、IBMサイトよりダウンロード。
DB2インストール後、データベースとテーブルを作成して検証してみました。(以下写真)


SQL実行画面

先ずはインストールしたデータベースからきちんとデータを閲覧できるか、通常のSQLコマンドを実行。一部表示コマンドが違う(DB2⇒LIST TABLES ,MYSQL⇒SHOW TABLES)ものの、基本はORACLEやMYSQLなどの問合せと同じです。


テーブルデータ表示

先程のSQL文によりテーブルの中身を表示。この中で特に注目して欲しいのがDESCRIPTION列に格納されているXMLという項目。通常のRDB形式のデータ(上記だとXMLの部分以外)はテーブルの中にそのままデータが格納さているのに対し、XML形式のデータは階層構造になったデータ形式の為テーブル上の格納方式が少々異なります。そこで、わかりやすく「XML」中にある階層データをXquery検索を利用して表示してみました。


XQuery実行画面

上段がXQuery文ですが、SQL文とかなり記述が異なります。
というか今回の例だとWHERE句以外共通部なし??。
通常のSQL文だとFROM句で対象表を指定して、SELECT句で抽出する列を指定するといった検索方法ですが、XQuery文では階層化されたノードから特定のデータを抽出します。わかりやすくいうとHTMLのリンクパスみたいなものです「../images/img/img.xml」に近い感じで、パスで位置を特定します。このパス検索にXPathとFLWORというシーケンス変数を利用しているんですが、説明が長くなりそうなので今回は割愛します。
そんなわけで、今回はXMLの「検索」に絞って触れてみたんで、次回はノードの追加・更新・削除といったSQL文のDML操作に該当するものをXQueryでやってみようと思います。
っと、その前に溜まったカフェ、グルメ写真を掲載しなくてわ!

2007.02.19 Monday 23:20 | comments(3) | trackbacks(0) | 
<< | 2 / 7 PAGES | >>