実行時にデータベースにクエリーを実行して、データを取得することができます。取得したデータはレコードセットと呼ばれ、ページ上にクエリーオブジェクトとして保管されます。クエリーオブジェクトは、レコードセット値と RecordCount、CurrentRow、ColumnList、SQL、Cached および SQLParameter クエリー変数を含んでいる特殊なエンティティです。クエリーオブジェクトの名前は cfquery タグの name 属性で指定します。クエリーオブジェクトのことを、単にクエリーと呼ぶこともあります。
cfquery タグの簡単な例を次に示します。
SELECT * FROM Employee |
注意:クエリーのレコードセットについて説明する場合は、「レコードセット」と「クエリーオブジェクト」を同じ意味で使用します。詳細については、Using Query of Queriesを参照してください。 |
データベースからデータを取得するには、次の手順を行います。
- ページ上で cfquery タグを使用して、データベースへの接続方法を ColdFusion に指示します。
- cfquery ブロック内に SQL コマンドを記述して、データベースから取得するデータを指定します。
- クエリーオブジェクトを参照し、cfoutput、cfgrid、cftable、cfgraph、cftree などのデータ表示タグでそのデータ値を使用します。
cfquery タグ
cfquery タグは最も頻繁に使用される CFML タグの 1 つです。このタグは、クエリーによって返されるデータの取得および参照に使用します。ページ上で cfquery タグが認識されると、次の処理が実行されます。
- 指定されたデータソースに接続します。
- ブロック内に含まれている SQL コマンドが実行されます。
- 結果セット値がクエリーオブジェクトとしてページに返されます。
cfquery タグのシンタックス
次のコードに、cfquery タグのシンタックスを示します。
SQL コード... |
このクエリーコードによって、ColdFusion で次の処理が実行されます。
- cfdocexamples データソース ("cfdocexamples.mdb" データベース) に接続します。
- 指定された SQL コードが実行されます。
- 取得されたデータがクエリーオブジェクト EmpList に保管されます。
クエリーを作成してデータを取得するときは、次のガイドラインに従ってください。
- cfquery タグはブロックタグなので、<cfquery> 開始タグと </cfquery> 終了タグの両方を使用します。
- クエリーの name および datasource 属性は、cfquery 開始タグに記述します。
- クエリーの実行時におこなう処理をデータベースに指示するには、cfquery ブロック内に SQL ステートメントを配置します。
- SQL 内でリテラル文字列を参照するときは、単一引用符(')を使用します。例えば、SELECT * FROM mytable WHERE FirstName='Jacob' は、名前フィールドが Jacob であるレコードを mytable からすべて抽出します。
- 属性値は、"attrib_value" のように二重引用符(")で囲みます。
- cfquery タグ内でデータソースを参照する前に、そのデータソースが ColdFusion Administrator 内に存在することを確認してください。
- SQL ステートメントで参照している列やテーブルが存在しない場合、クエリーは失敗します。
- cfoutput、cfgrid、cftable、cfgraph、cftree などの表示タグで、クエリーの名前を指定して、クエリーデータを参照します。
- ColdFusion で返されるデータベース列からは、テーブルおよび所有者を表す接頭辞は削除されます。例えば、Employee.Emp_ID をクエリーすると Employee. が削除され、Emp_ID として返されます。列名に重複がある場合は、エイリアスを使用することで対応できます。詳細については、クエリーオブクエリーの使用を参照してください。
- SQL ステートメントに、MIN、MAX、COUNT などの SQL 予約語を使用することはできません。予約語はデータベースによって異なるので、予約語のリストについてはデータベースのマニュアルを参照してください。
- SQL で COMPUTE AVG() を使用した場合、ColdFusion では avg() が列名として返されます。以前のバージョン(ColdFusion 5 および ColdFusion MX 7)では ave() が列名として返されていました。
データベーストリガによって返された結果を取得するには、次の接続パラメータを接続文字列に追加します。
AlwaysReportTriggerResults=true
このパラメータは、データベーストリガ (データベースに格納され、テーブルが変更されると実行されるプロシージャ) によって生成された結果をドライバからどのように報告するかを指定します。Microsoft SQL Server 2005 の場合、これには、データ定義言語 (DDL) イベントによって起動されるトリガが含まれます。true に設定した場合は、トリガによって生成された結果を含むすべての結果がドライバから返されます。複数のトリガ結果がある場合は、1 つずつ返されます。個々のトリガ結果を取得するには、Statement.getMoreResults メソッドを使用します。警告やエラーが発生した場合は、結果内で報告されます。
クエリーの構築
前述のように、クエリーを構築するには cfquery タグと SQL を使用します。
注意:以降の多くの手順では、cfdocexamples.mdb データベースに接続する cfdocexamples データソースを使用しています。このデータソースは、デフォルトでインストールされています。データソースの追加および設定については、『ColdFusion 設定と管理』を参照してください。 |
テーブルに対するクエリーの実行
次の内容の ColdFusion ページを作成します。
<head>
<title>Employee List</title>
</head>
<body>
<h1>従業員リスト</h1>
<cfquery name="EmpList" datasource="cfdocexamples">
SELECT FirstName, LastName, Salary, Contract
FROM Employee
</cfquery>
</body>
</html>注意:実際のコーディングでは、クエリーを ColdFusion コンポーネントに含めて、構造化された再利用可能なコードにすることをお勧めします。ここでは簡略化のために ColdFusion ページの本文にクエリーを記述しています。ColdFusion コンポーネントの使用方法の詳細については、ColdFusion コンポーネントの構築と使用を参照してください。
- このページに「emplist.cfm」という名前を付けて、Web のルートディレクトリの下の myapps ディレクトリに保存します。たとえば、Windows コンピュータ上のデフォルトのパスは次のようになります。C:¥CFusion¥wwwroot¥myapps¥
- Web ブラウザに次の URL を入力します。http://localhost/myapps/emplist.cfm。ヘッダのみが表示されます。
- ブラウザーでソースを表示します。ColdFusion によって EmpList データセットが作成されますが、ブラウザーに返されるのは HTML およびテキストのみです。ページのソースを見ると、HTML タグと見出しの「従業員リスト」しか含まれていません。ページにデータセットを表示するには、データを出力するタグと変数をコーディングします。
コードの説明
作成したクエリーによって、cfdocexamples データベースからデータが取得されます。このコードの太字の部分について、次の表で説明します。
コード |
説明 |
---|---|
<cfquery name="EmpList" datasource="cfdocexamples"> |
cfdocexamples データソースで指定されているデータベースに対してクエリーを実行します。 |
SELECT FirstName, LastName, Salary, ContractFROM Employee |
Employee テーブルの FirstName、LastName、Salary、Contract フィールドからデータを取得します。 |
</cfquery> |
cfquery ブロックを終了します。 |