TOPサーバ構築・運用> JSPページからデータベースに接続する
はじめてのサーバサイドJava
はじめてのサーバサイドJava

第10回:データベースとの連携(後編)

著者:山田 祥寛   2006/5/16
1   2  次のページ
JSPページからデータベースに接続する

   前回に引き続きデータベースとの連携について解説します。

   それでは、実際にJSPページからデータベースサーバ(MySQL)上のartistテーブルにアクセスし、読み込んだデータを一覧表示するdatabase.jsp(リスト1)を説明していきましょう(図1)。
リスト1:database.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<sql:setDataSource var="db" dataSource="jdbc/Marugoto" /> (1)
<sql:query var="rs" dataSource="${db}"> (2)
SELECT * FROM artist ORDER BY id ASC</sql:query>

<html>
<head>
<title>データベース連携</title>
</head>
<body>
<table border="1">
<tr>
<th>名前</th><th>出身国</th><th>享年</th><th>誕生日</th><th>代表作</th>
</tr>
<c:forEach var="rec" items="${rs.rows}"> (3)
   <tr>
      <td>${fn:escapeXml(rec['name'])}</td>
      <td>${fn:escapeXml(rec['country'])}</td>
      <td>${rec['old']}歳</td>
      <td>${rec['birth']}</td>
      <td>${fn:escapeXml(rec['work'])}</td>
   </tr>
</c:forEach>

</table>
</body>
</html>

データベースの内容を一覧表示
図1:データベースの内容を一覧表示

   JSPページでデータベース操作を行うには、JSTL Databaseタグライブラリを使用します。Databaseタグライブラリで使える主要なタグは、表1を参照してください。

タグ 概要
<sql:setDataSource> データベースへの接続
<sql:query> 結果セットの取得
<sql:update> テーブルの登録/更新/削除
<sql:transaction> トランザクションの定義

表1:Databaseタグライブラリに含まれる主なタグ


データベース接続とクエリ発行

   データベース操作を行うためには、まずデータベースへの接続を取得する必要があります。データベースへの接続を確立するのは、<sql:setDataSource>要素の役割です(リスト1の1)。var属性に接続オブジェクトを格納するための変数を、dataSource属性にコンテキスト定義ファイルで定義したデータソース(リソース)名を、それぞれ指定します。

   データベースへの接続に成功したら、あとはデータベースに対してSQLクエリを発行するだけです。Databaseタグライブラリでは、発行するクエリの種類によって使用する要素が異なるので注意が必要です。SELECT命令を発行する場合には<sql:query>要素を、INSERT/UPDATE/DELETE命令など、そのほかのクエリを発行する場合は<sql:update>要素を使用する必要があります。

   <sql:query>要素はdataSource属性に<sql:setDataSource>要素で取得したデータソースを、配下のテキストには発行するSQLクエリを、そしてvar属性には結果を格納する変数を、それぞれ指定してください(リスト1の2)。<sql:query>要素は指定されたSQLクエリを発行し、その結果として「結果セット」を返します。

   結果セットとは、データベースから取り出されたレコード群を一時的に保持する「仮想的なテーブル」のようなものです。


結果セットからHTMLテーブルへ

   取り出した結果セットの内容を取得するのは、<c:forEach>要素の役割です(リスト1の3)。<c:forEach>要素は、items属性で指定したコレクション(配列)の内容を順番に取り出し、var属性で指定した変数にセットしながら、ループを繰り返します。${rs.rows}は、結果セットに含まれる行情報のセットを返します。

   つまり、ここでは結果セットの行情報セットからレコードを順番に取り出しながら、各フィールド値を出力しているというわけです。それぞれのフィールド値には、${変数名['フィールド値']}の形式でアクセスできます(図2)。

結果セットの処理方法
図2:結果セットの処理方法

1   2  次のページ

WINGSプロジェクト  山田 祥寛
著者プロフィール
有限会社WINGSプロジェクト   山田 祥寛
Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト(http://www.wings.msn.to/)」の代表。主な著書に「10日でおぼえる入門教室シリーズ(Jakarta・JSP/サーブレット・PHP・XML)」(以上、翔泳社)、「書き込み式 SQLのドリル」(ソシム)など。最近ではIT関連技術の取材、講演まで広くを手がける毎日。

INDEX
第10回:データベースとの連携(後編)
JSPページからデータベースに接続する
  データベースにデータを登録しよう