Unit 4:发布数据库内容

ColdFusion 支持多种类型的数据库,但不同的版本支持的数据库类型有所不同,专业版支持所有 ODBC 数据源和 OLE DB 数据源(尽限 Windows 环境中)、企业版支持所有 ODBC 数据源和 OLE DB 数据源(尽限 Windows 环境中),并带有两个本地数据库驱动,分别为 Sybase System 11 和 Oracle 7.3 、8.0(尽限 Solaris 和 Windows NT 环境中)。你可以在Administrator 中的 Data Sources 页中配置数据源,但这些数据源的驱动必须已经安装在你的机器中了。

ColdFusion 中数据库的使用十分简单方便,在配置好数据库以后,查询、输出等都可以通过几个定制标记、标准的 SQL 查询语句和几条简单语句处理完成。

设置 ODBC 数据源

你可以在你的机器中安装 Microsoft Data Access Components (MDAC 2.0),它会在你的机器中安装几种 ODBC 驱动程序:Microsoft SQL Server、Microsoft Access and FoxPro databases 、Borland dBase-compliant databases、Microsoft Excel worksheet data ranges 和 Delimited text files 。

下面介绍配置 ODBC 数据源的步骤:

  1. 进入 Administrator 中的 Data Sources 页2.在 data source name

    中输入一个名字

  1. 在 ODBC driver 中选取一个适当的数据库类型

  2. 双击 Add 按钮打开建立 ODBC 数据源页

  3. 输入数据源文件目录和名称和其他一些信息,双击 CF Settings

    按钮进入可选设置页,在此页中可以设置 Login 信息,限制 SQL 的操作。

  4. 双击 Create 按钮,新的数据源被加入到系统中了,并显示在 Data Sources

    页中,

双击数据源名字可以在进入数据源页

  1. 检查数据源连接是否正确,打开 Verify Data Source

    页,选择要检查的数据源名字,双击。

查询数据库

在所有数据库的使用中,查询数据库是基础。下面介绍如何在 CFQUERY 标记中使用结构化查询语句(SQL)查询数据库。

下面是一个简单的数据库查询的例子,要查询的数据库的 ODBC 数据源名叫CompanyDB,建立一个查询名叫"EmployeeList",从 Employee 表中返回所有的记录:

<CFQUERY NAME="EmployeeList" DATASOURCE="CompanyDB"> SELECT *

FROM Employees

</CFQUERY>

在这里查询名称十分重要,它用来标识此次查询,在以后的结果输出时或引用查询结果时要用到它。

CFQUERY 的标准语法是:

<CFQUERY NAME="query_name"// (必须)定义查询名称

DATASOURCE="ds_name"//(必须)ODBC 数据源名称DBTYPE="type"//数据驱动的类型

DBSERVER="dbms"//针对本地数据库驱动,指定它的数据库服务器的名称,一旦指

定,DATASOURCE 指定的数据源无效。

DBNAME="database name"//数据库名称(只对 Sybase System 11 驱动有效),一

旦指定,DATASOURCE 指定的数据源无效。USERNAME="username"//数据源要求的用户名称PASSWORD="password"//数据源要求的用户密码

MAXROWS="number"//最多返回多少行记录

BLOCKFACTOR="blocksize"//此参数用于 ORACLE 本地数据库驱动和 ODBC 驱动,

指定每次从服务器上读取的最大记录数TIMEOUT="milliseconds"//指定多少个毫秒后表示执行超时。对于大部分 ODBC 驱

动无效, SQL Server 6.x 或以上版本的驱动支持

CACHEDAFTER="date" //指定一个日期值,ColdFusion 在此日期后使用查询结果缓存,要在 Administrator 中开启查询缓存项

CACHEDWITHIN="timespan" //指定时间间隔,在时间间隔内如果原始查询结果无

效则使用缓存的查询结果PROVIDER="COMProvider" // COM 提 供 者 ( 只 限 OLE-DB ) PROVIDERDSN="datasource" // COM 提供的数据源名字(只限 OLE-DB ) DEBUG="Yes/No"//使用查询调试>

SQL statements

</CFQUERY>

输出结果

在输出查询结果前,可以先判断查询是否有结果。例如对于上面的那个查询的例子, 可以用下面语句判断查询结果是否为空:<CFIF # EmployeeList. RecordCount# EQ 0>其中 EmployeeList 为查询的名称。

在输出结果时常用到的定制标记有 CFOUTPUT、CFTABLE、CFCOL 等。CFOUTPUT 的输出功能强大,它可以用来输出查询结果,也可以用来输出其他操作的结果。它的标准语法是:

<CFOUTPUT QUERY="query_name"//(可选)查询名称MAXROWS="max_rows_output"//(可选)指定输出的最大列数STARTROW="start_row"//(可选)从哪一行开始输出GROUP="parameter"//(可选)按 GROUP 指定的参数成组的输出结果>

</CFOUTPUT>

针对 CFQUERY 查询和 CFOUTPUT 输出结果,我们给出一个完整的例子: 我们定义一个 CFM 文件:employeelist.cfm 用来查询数据库和输出结果

<!--- Query to select customers --->

<CFQUERY NAME="EmployeeList" DATASOURCE="CompanyDB"> SELECT *

FROM Employees

</CFQUERY>

<HTML>

<HEAD>

<TITLE>Employee List</TITLE>

</HEAD>

<BODY>

<H2>Employee List</H2>

<!--- Output section --->

<CFOUTPUT QUERY="EmployeeList">

<HR>

# FirstName# # LastName#

(Phone: #PhoneNumber#) <BR> //其中 FirstName、

</CFOUTPUT>

</BODY>

</HTML>

你可以在一个应用程序中调用这个文件

<A HREF="路径名称/employeelist.cfm">Employee List</A>

ColdFusionServer 执行了查询后,返回结果,送回到客户端看到的是标准的 HTML 语言编写的结果:

<HR>

Deborah Jones (Phone: 612-227-1019) <BR>

<HR>

John Smith (Phone: 507-452-7224) <BR>

<HR>

Frank Wilson (Phone: 612-831-9555) <BR>

使用表格输出结果

因为 CFOUTPUT 标志中可以包含标准的 HTML 代码,所以可以使用 HTML 表格输出查询结果,但 ColdFusion 中也提供自定义的标志 CFTABLE 和 CFCOL 来输出结果,下面我们分别介绍一下这两种输出方式。

  • CFML 表格

CFTABLE 定义要输出的查询名称,最大行数等参数;CFCOL 定义每一列的标题和宽度。两个标记同时使用定义整个表单。还以上面的查询为例,使用 CFTABLE 和 CFCOL 来输出 EmployeeList 查询的结果表单。表单由三列组成,不超过 10 行,分别列出CompanyDB 数据库 Employees 表单中的 FirstName、LastName 和PhoneNumber。

<CFTABLE QUERY=" EmployeeList " MAXROWS=10>

<CFCOL HEADER=" FirstName " WIDTH=25

TEXT="<I># FirstName #</I>">

<CFCOL HEADER=" LastName " WIDTH=15

TEXT="# LastName #">

<CFCOL HEADER=" PhoneNumber " WIDTH=15 ALIGN=RIGHT

TEXT="# PhoneNumber #">

</CFTABLE>

  • HTML 表单

尽管使用 CFTABLE 和 CFCOL 来输出查询的结果表单十分简单易用,但是它毕竟

没有使用 HTML 编写表单那样灵活,有的编程人员喜欢使用 HTML 编写具有自己风格的表单,所幸的是 CFOUTPUT 标志中可以包含标准的 HTML 代码,这就可以使用 CFOUTPUT 和 HTML 代码编写 HTML 表单。还以上面的查询为例,使用 CFOUTPUT 和 HTML 代码编写 HTML 表单。

<table border="0" cellpadding="0" cellspacing="0" cellspaceing="0">

<tr><td colspan="6" width="400"><font size="2"><strong> 雇员信息浏览:

</strong></font></td></tr>

<tr><td colspan="6"

width="400">      </td></tr>

<CFOUTPUT MAXROWS =10 StartRow = 1 query = EmployeeList >

<tr>

<td width="100"><font size="2" face=" 文 鼎 CS 长 美 黑 "><strong> 名称:</strong></font></td><td width="50"># FirstName #</a></td>

<td width="100"><font size="2" face=" 文 鼎 CS 长 美 黑 "><strong> 姓氏:</strong></font></td><td width="80"># LastName #</td>

<td width="100"><font size="2" face=" 文 鼎 CS 长 美 黑 "><strong> 电话:</strong></font></td><td width="80"># PhoneNumber #</td>

</tr>

</CFOUTPUT>

</table>

如果学员有兴趣可以在练习中分别用 CFTags 和 HTML 表单输出查询结果,看看两者在输出形式上有何不同。

练习题:

使用 Access 或 SQL Server 建立一个小型的数据库,配置 ODBC,做简单查询,并输出结果。