<x:select>

x:select アクションは、リレーショナル・データベースの中の照会を実行するために使用するものです。 照会により空でない結果セットが作り出された場合は、 その行がアプリケーション・サーバー・マシン上のメモリーのキャッシュに入れられます。 行の 1 つ、すなわち当初の最初の行は常に現在行とみなされます。

このアクションを使用して DBSelect Bean を作成します。 この Bean には、名前が id 属性の中に指定されている変数を使用してアクセスすることができます。

JSP アクションは、DBSelect Bean の基本関数を利用するために提供されているものです。 x:nextRow および x:previousRow を使用して、結果セットの中の他の行に移ることができます。 x:updateRowx:deleteRow、および x:insertRow アクションを使用して、 追加 SQL ステートメントを書かなくても結果セットの中の行を変更することができます。 x:getColumn および x:setColumn アクションを使用して、結果セットの中の桁値にアクセスすることができます。 SQL ステートメントにパラメーターがある場合は、x:getParameter および x:parameter アクションを使用してパラメーターにアクセスすることができます。

DBSelect Bean のメソッドは全部、スクリプトレットを使用して実行することもでき、 そのプロパティーの全部に標準の jsp:getProperty および jsp:setProperty アクションを使用してアクセスすることもできます。

構文

<x:select	id = "name"
		scope = "page|request|session"	
		connectionSpec = "connectionSpec_id"
		connectionSpecRef = "connectionSpecRef"
		maxFieldSize = "numberOfBytes"
		maxRows = "numberOfRows"
		distinctTypesEnabled = "true|false"
		timeOut = "seconds"
		readOnly = "true|false"
		nullToken = "string"
		trace = "true|false" >
	<x:sql>
	</x:sql>
	<x:parameter	
		parmName = "name"
		position = "number"
		type = "sqltype"
		mode = "in|out|inout"
		value = "parmValue" />
</x:select>

x:select アクションには以下の属性があります。

id
指定されている名前空間の中の DBSelect Bean の識別と、 そのスクリプト記述変数名の識別にも使用される名前。 指定する名前には大/小文字の区別があり、 名前はスクリプト記述言語の変数の名前指定の現行規則に従ったものとしなくてはなりません。
scope
スコープであり、この範囲内でオブジェクトが定義されます。デフォルト値は page です。
connectionSpec
x:dataSourceSpec または x:driverManagerSpec アクションの ID。 値には大/小文字の区別があり、値はスコープ内にある connectionSpec アクションと一致させる必要があります。

参照アクションにより、データベースへの接続に必要な情報が提供されます。 このアクションが x:batch アクションの本体内部で発生する場合は、この属性を省略してください。 その場合は x:batch アクションの中で識別された connectionSpec アクションが使用されます。 この属性を両方の場所で指定した場合、この属性にはエラーのフラグが付けられます。

connectionSpecRef
接続に必要な情報を得るために使用される DBConnectionSpec オブジェクトへの参照。

connectionSpec または connectionSpecRef のいずれかを指定することができますが、両方を指定することはできません。

maxFieldSize
結果セットの中の任意の桁の最大サイズをバイト数で指定します。 値の 0 は、最大値を指定しないことを意味します。デフォルト値は 0 です。
maxRows
取り出してキャッシュに入れることができる行の最大数を指定します。 値の 0 は、最大値を指定しないことを意味します。デフォルト値は 0 です。
distinctTypesEnabled
ユーザー定義の (特殊) タイプを含む結果セットに対して挿入、更新、および削除が行えるかどうかを指定します。 デフォルト値は False です。
timeOut
実行するステートメントに許容される最大秒数。デフォルト値は 0 です。この値は最大秒数を指定しないことを意味します。
readOnly
データを更新できるかどうかを指定します。true (はい) の値はデータベース・マネージャーが更新を認めている場合でさえも、 更新ができないことを意味します。 false (いいえ) の値はデータベース・マネージャーが更新を認めているという条件の下で更新ができることを意味します。 デフォルト値は false です。
nullToken
大/小文字が区別されるストリング値を指定します。この値はデータベースの NULL 値を表すために使用されます。 この属性はオプションです。この属性は、この Select 上の桁またはパラメーターの値の取得と設定を行う任意のアクション上の同じ属性のデフォルト値として使用されます。 両方の場所でこの属性が省略された場合のデフォルトは &empty です (&empty は HTML 文字エンティティーに類似した特殊値であり、 この属性では空ストリングを表すものとして認識されます)。 NULL 値の表記の詳細については、『NULL 値』を参照してください。
trace
データベース・アクションのトレースが行えるようにするかどうかを指定します。デフォルト値は false です。

x:select アクションは、その本体内に以下のタグをもつことができます。

<x:sql>
実行する SQL ステートメントを指定します。
<x:parameter>
SQL ステートメントの中のパラメーターに値とメタデータを指定します。 x:parameter タグと SQL ステートメントの中のパラメーターとの間には 1 対 1 の対応が必要です。

以下のアクションは、名前が select1 で、そのスコープがセッションである DBSelect Bean を作成するものです。 このアクションでは、conn1 の中の情報を使用してデータベースへの接続が行われ、Select ステートメントが実行されます。 このステートメントの結果セットには、EMPLOYEE テーブルからの従業員番号と従業員名が含まれます。 Select には、パラメーターは含まれません (データベースであるという点から) が、これに代えて要求オブジェクトからのユーザー入力が含まれています。

<x:select id="select2" scope="session" connectionSpec="conn1">
	<x:sql>
		SELECT EMPNO, EMPNAME FROM EMPLOYEE
		WHERE WORKDEPT = ?
	</x:sql>
	<x:parameter position="1" type="VARCHAR"
		   value='<%= request.getParameter("department") %>' />
</x:select>
	

以下のアクションでは、名前 select3 をもつ DBSelect Bean が作成されます。 この例は前の例と同じようなものですが、この例ではパラメーターが position (位置) ではなく、name (名前) によって識別されています。

<x:select id="select3" scope="session" connectionSpec="conn1">
	<x:sql>
		SELECT EMPNO, EMPNAME FROM EMPLOYEE
		WHERE WORKDEPT = :dept
	</x:sql>
	<x:parameter parmName="dept" type="VARCHAR"
		   value='<%= request.getParameter("department") %>' />
</x:select>

以下のアクションでは、前の 2 例からの結果セットの中の行が繰り返し反復され、 桁値が x:getColumn アクションを使用して要求出力に書き出されます。 x:repeat アクションの詳細については<x:repeat>を、x:getColumn アクションの詳細については<x:getColumn>を参照してください。

<table border="1" width="300" height="100"><tbody>
	<tr> <td>Employee number:</td> <td>Name:</td> </tr>
	<x:repeat name="select1" over="rows">
		<tr>
			<x:repeat over="columns">
				<td><x:getColumn /></td>
			</x:repeat>
		</tr>
</x:repeat>

以下のアクションでは、結果セットの中の行が繰り返し反復され、 桁値が x:getColumn アクションを使用して要求出力に書き出されます。 x:repeat アクションの詳細については<x:repeat>を、x:getColumn アクションの詳細については<x:getColumn>を参照してください。

<table border="1" width="300" height="100"><tbody>
	<tr> <td>Employee number:</td> <td>Name:</td> </tr>
	<x:repeat name="select1" over="rows">
		<tr>
			<td><x:getColumn colName="EMPNO"/></td>
			<td><x:getColumn colName="EMPNAME"/></td>
		</tr>
	</x:repeat></tbody></table>

フィードバック