第5回 データベースのブラウザを作る
丸山不二夫
稚内北星学園大学学長
(http://www.wakhok.ac.jp/)
2001/7/24
今回は、Webコンポーネントを含むJ2EEアプリケーションを作ってみようと思います。正確にいえば、今回のアプリケーションにはWebコンポーネントしか含まれていません。トランザクション処理が問題になるような大規模なものでなければ、JSPだけでもいろいろなアプリケーションの開発が可能です。deploytoolの使い方も見てみようと思います。作成済みのアプリケーション(systables.ear)はここからダウンロードできます。
テーブル・ブラウザを作る |
最初に、今回紹介するテーブル・ブラウザの機能を見ておきましょう。ページの先頭に2つのプルダウン・メニューがあります。左側のメニューには、接続しているデータベースのテーブルの名前の一覧が表示され、テーブルを選ぶことができます(図1)。
図1 今回作成するテーブル・ブラウザ |
図2 Attributesを表示したところ |
右側のメニューには、ContentsとAttributesという2つのオプションがあり、Contentsを選べば指定したテーブルの内容が表示され、Attributesを選べば、テーブルを構成する項目についての情報が得られます(図2)。今回は、J2EEと一緒に提供されているJava Pet Storeデモのデータをサンプルとして使っていますが、このテーブル・ブラウザの機能は汎用的なものです。
データベースのシステム・テーブルを読む |
このアプリケーションでは、データベースに対して3つの種類の検索が行われることになります。第1は、データベース中のすべてのテーブルの一覧を作る検索です。この結果はテーブル名を表示するプルダウン・メニューの作成に利用されます。第2の検索は、テーブル名が指定されてContentsオプションが選ばれた場合で、第3の検索は、Attributesオプションが選ばれた場合です。これらのうち、第1と第3の検索では、一般のユーザーが定義したテーブルではない、データベースのシステム・テーブルを利用することになります。
データベース中の |
まず、データベース中のテーブル一覧の作り方を見てみましょう。今回は、データベースとしてJ2EEと一緒に提供されている「Cloudscape」を例にして説明していますが、OracleでもSybaseでも、PostgreSQLでも同じような処理が可能なので、これらのデータベースを利用している人は、ぜひ、挑戦してみてください。
Cloudscapeでは、テーブルの情報はSYSTABLESというテーブルに格納されています。たいていのデータベースにはこのテーブルがあるはずです。Cloudscapeでは、テーブル名は正式には、スキーマ名+"." +テーブル名という形で管理されています。例えば、このSYSTABLESというテーブルの正式名称は、このテーブルの所属するSYSスキーマの名前で修飾された、SYS.SYSTABLESということになります。Cloudscape内のテーブルを一意に指定するためには、スキーマ名で修飾された正式なテーブル名が必要ですので、汎用的なツールとしては、スキーマ名付きでテーブル名を獲得しようと思います。
2つのテーブルのジョインとAliasの利用 |
文字列としてのスキーマ名は、実は、SYSTABLESにはなくてSYSSCHEMASというテーブルにあります。この2つのテーブルは、SCHEMAIDという項目を共有しています。ですから、次のようなSELECT文で2つのテーブルのジョインを作れば、スキーマ名とテーブル名を一緒に獲得することができます。From句の中の小文字のtとsは、テーブル名の別名(alias)というもので、Where句でのジョインの条件のところで項目名の修飾に利用されています。この修飾がないと、2つのテーブルに同じSCHEMAIDという名前の項目が存在しているわけですから、どの項目のことか分からなくなりますので、この修飾は必須です。テーブル名をそのまま項目名の修飾に使うこともできるのですが、エイリアスを使う方が簡単です。
SELECT SCHEMANAME, TABLENAME |
HTMLでプルダウン・メニューを作るには |
このSELECT文で得られた情報から、プルダウン・メニューを作ればいいのですが、念のため、HTMLのFORMでのプルダウン・メニューの作り方を復習しておきましょう。ちょうど、今回のサンプルの右側のメニューは、ContentsとAttributesという2つの固定した選択肢しか持っていませんので、これを見ておきましょう。HTMLで、次のようなコードになります。FORMのACTION部分には、このFORMから呼び出されるアクションを記述します。この例では、showtable.jspと名付けられた別のJSPを呼び出します。
<FORM METHOD="POST" ACTION="showtable.jsp">
|
この例の、<option>以下の部分に、先のセレクト文で獲得されたテーブルの名前を置いていけばいいのです。
テーブル一覧のメニューを作る |
これで、JSPでテーブル一覧のプルダウン・メニューを作る準備ができました。あとは、createStatement()、executeQuery( query )といった、JDBCの基本的なメソッドを使って検索結果をResultSetとして獲得し、それから必要な項目を順番に抜き出していけばいいのです。今回は、あまり詳しく触れることはできませんが、ここで行われているのは、JDBCの処理としては定型的なものです。
<FORM METHOD="POST" ACTION="showtable.jsp">
|
こうしたJSPのコードは、最初には、HTMLとJavaのコードが入り交じった奇妙なものに思えるかもしれません。<%.....%>に囲まれた部分にJDBCのJavaコードが詰め込まれています。JSPでは、こうした部分を、「スクリプトレット(Scriptlet)」と呼んでいます。このScriptletは、先に見たように、システム・テーブルにアクセスしてデータベースの正式なテーブル名を獲得する働きをしているのですが、ページの表示に限っていえば、このScriptletがかかわるのはout.println()の部分だけです。具体的には、<option> テーブル名という文字列をページに複数出力することになります。この出力が、FORMでプルダウン・メニューの複数の選択肢を構成するHTMLのコードとして解釈されることになります。
2つのページ間のパラメータの引き渡し |
このFORMには、2つのselect(SQLのSELECTとは違います)が含まれています。最初のtableという名前を持つselectで、option SYS.SYSTABLESが2つ目のtypeという名前を持つselectで、option Contentsが選択されて[Show]ボタンが押されたとしましょう。このとき、ACTIONで指定されたJSPページshowtable.jspに、次のようなScriptletがあれば、こうした選択情報を受け取ることができます。この場合には、tableという変数に文字列SYS.SYSTABLESが、typeという変数に文字列Contentsがセットされます。
<% |
1/3
|
J2EEの基礎(第5回) | |
テーブル・ブラウザを作る | |
J2EEでのデータベースとの接続 | |
テーブル・ブラウザをインストールし実行する |
連載内容 | |
J2EEの基礎 | |
第1回 Java Pet Storeで、J2EEを体験する(1) | |
第2回 Java Pet Storeで、J2EEを体験する(2) | |
第4回 J2EEアプリケーションを構成するコンポーネント | |
第5回 データベースのブラウザを作る | |
第6回 EJBにおけるコンテナとコンポーネント | |
第7回 J2EEのセキュリティのキホンを知る | |
第8回 J2EEのトランザクション処理 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|