[ColdFusion] クエリー(1/5)

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング

例題

sysシステムのデータベースdbがある。
データベースdbの中にテーブルtblがある。
テーブルtblの項目に項目fld1・項目fld2がある。
項目fld1の一覧を表示する。
※データソース名をdsnとする。

解答

<cfquery name="qry" datasource="dsn">
select fld1
from tbl
</cfquery>
<cfoutput>
<table border="1">
     <tr>
          <td>fld1</td>
     </tr>
     <cfloop query="qry">
          <tr>
               <td>#qry.fld1#</td>
          </tr>
     </cfloop>
</table>
</cfoutput>

 

dsnの設定はColdFusionのAdministrator(管理画面)で
設定する必要があります。

 

この設定によって、プログラムの変更なしで、
データベースの指定を変更することができます。

 

利用方法としては、本番データを一時的に参照したい場合など
使ったりすることがあります。

 

実際はdsnと直接指定ではなく、
例えば以下のようにすることがほとんどだと思います。

 

<cfset tmp_dsn = "dsn">
<cfquery name="qry" datasource="#tmp_dsn#">

 

上記のようにtmp_dsn変数にセットすることで、
条件によっては違うdatasourceを使うことができます。

 

このようにすると、tmp_dsn変数の値を変更することで
同じように複数設定してあるcfqueryタグ部分は
変更しなくてよいですね。

 

cfqueryタグ内は、SQLを書くわけですが、
SQLでも関数を使う場合があります。

 

その関数は、使用するデータベースシステムの関数が使用できます。

 

例えばマイクロソフトのSQLServerで、個人的によく使う関数はISNULLです。

 

通常は

(fld1 = '') or (fld1 is null)

という条件を

ISNULL(fld1,'')=''

と書くことができます。
わかりやすいですね。

 

しかしながら、ISNULL関数はオラクル(同様の関数はNVL)にはないので
オラクルのデータベースを使う場合は、使うことができません。

 

将来、他のデータベースシステムに置き換える場合は、
注意が必要です。

 

今回は簡単なSQLでしたが、
cfqueryタグでかこんだ書き方が見やすいですね。

 

Javaや他の言語を使った人で、ColdFusionのSQLを使う場合、
以下のようなソースを見たことがあります。

 

<cfset sSQL = "">
<cfset sSQL = sSQL & "select fld1 ">
<cfset sSQL = sSQL & "from tbl ">
<cfset execSql(sSQL)>

 

execSqlという自作関数にSQL文を渡して実行する
というやり方です。

 

その関数内でcfqueryタグを使用しています。

 

間違いではありませんが、SQL文がわかりづらいし、
修正や追加もしにくいでしょう。

 

そんなときは、cfsavecontentタグを使うとよいです。

 

<cfsavecontent variable = "sSQL">
<cfoutput>
select fld1
from tbl
</cfoutput>
</cfsavecontent>
<cfset execSql(sSQL)>

 

cfsavecontentタグ内のcfoutputタグが、ちょっと目障りですね。
関数内での利用の場合は、必要となる場合があります。

 

以下のように全体をcfoutputでくくると
プログラムとしてはすっきりします。

 

<cfoutput>
<cfsavecontent variable = "sSQL">
select fld1
from tbl
</cfsavecontent>
<cfset execSql(sSQL)>
</cfoutput>

 

あとはSQLのinsert,update,deleteなど覚えると
データの登録・修正・削除を
行うことができます。

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング

この記事に関連する記事一覧

最近の投稿
カテゴリー
タグ
アーカイブ
プロフィール