[PR]今日のニュースは
「Infoseek モバイル」


RDBMSとの接続

 Webアプリケーションといえば、RDBMS(リレーショナルデータベース管理システム) との接続は必須の機能と言えるでしょう。 ここではまずその序の口として、 簡単なテーブルを検索して表示するだけのサンプルを作りました。 使用するRDBMSはMySQLで、データベースアダプターはZMySQLDA 2.0.8 です。
ここで使うサンプル表は次のような定義です。

CREATE TABLE SHITEN(
  SHITEN_CODE VARCHAR(5) NOT NULL,
  SHITEN_NAME VARCHAR(30),
  CONSTRAINT SHITEN_PK PRIMARY KEY(SHITEN_CODE)
);

まず最初に、「Z MySQL Database Connection」のオブジェクトを1つ作成しておきます。 この作り方はWeb画面にまさに表示されるので、ここでは省きます。

DocSearchForm (DTML Document)

<dtml-var standard_html_header>
<h2>支店テーブル検索</h2>
<p>
<form action="DocSearchResult" method="POST">
名前で探す→<input type="text" name="shiten_name" maxlength="30">
<br>
<input type="submit" value="検索">
</form>
</p>
<dtml-var standard_html_footer>

検索条件を入力してもらうWebフォームです。

DocSearchResult (DTML Document)

<dtml-var standard_html_header>
<h2>検索しました。</h2>

<ul>
<dtml-in expr="ZsmSearchByName(shiten_name=shiten_name)">
<li><dtml-var shiten_code>  (<dtml-var shiten_name>)</li>
</dtml-in>
</ul>

<a href="DocSearchForm">検索入力に戻る</a><br>
<dtml-var standard_html_footer>

検索結果を表示するフォームです。
検索にはZ SQLメソッドZsmSearchByNameを使っており、 前のPythonスクリプトのときと同様、 Webフォーム変数の値をそのまま渡しています。 Z SQLメソッドの戻り値は、結果集合の各行を順番に要素とするシーケンスで、 RDBMSのカーソルのような使い方ができます。 (実際にはデータベースフェッチは完了しているのが違いですが) それにはdtml-inタグを使い、各行をループしながらHTMLストリームに出力するなどの処理を書きます。 各行の各カラムの値は、 カラム名を名前とするdtml-inタグ内部の名前空間でだけ存在する変数にアクセスすることによって取得できます。

ZsmSearchByName (Z SQL Method)

# parameter list: shiten_name
select shiten_code, shiten_name from shiten
where shiten_name like <dtml-sqlvar shiten_name type="string"> || '%'

検索を行うZ SQLメソッドです。 SELECT文についてはたいしたことない簡単なものです。 LIKE検索する場合にはこのように || '%' で連結するとよいでしょう。 Webフォーム変数の値の後ろに'%'をつけたものをZ SQLメソッドに渡しても構わないのですが、 上の例のような書き方が簡単と思います。
なお、arguments(引数)の欄には「shiten_name」と引数名だけを書くか、 「shiten_name : string」とデータ型を含めて書くかします。 このように引数が1つだけの場合、データ型は省略できるみたいです。 が、2つ以上の場合データ型を書かないとエラーになるので、 常に明示的にデータ型を指定したほうがよいと思います。

セクションのサブメニューに戻る
(first uploaded 2002/05/26 last updated 2003/01/09)