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 数据源的步骤:
- 进入 Administrator 中的 Data Sources 页2.在 data source name
中输入一个名字
-
在 ODBC driver 中选取一个适当的数据库类型
-
双击 Add 按钮打开建立 ODBC 数据源页
-
输入数据源文件目录和名称和其他一些信息,双击 CF Settings
按钮进入可选设置页,在此页中可以设置 Login 信息,限制 SQL 的操作。
-
双击 Create 按钮,新的数据源被加入到系统中了,并显示在 Data Sources
页中,
双击数据源名字可以在进入数据源页
- 检查数据源连接是否正确,打开 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,做简单查询,并输出结果。