Retrieving data

You can query databases to retrieve data at run time. The retrieved data, called the recordset, is stored on that page as a query object. A_ query object_ is a special entity that contains the recordset values, plus RecordCount, CurrentRow, ColumnList, SQL, Cached, and SQLParameter query variables. You specify the name of the query object in the name attribute of the  cfquery  tag. The query object is often called simply the query.
The following is a simple  cfquery  tag:

SELECT * FROM Employee 
ORDER BY LastName 
</cfquery>
Note:

The terms "recordset" and "query object" are often used synonymously when discussing recordsets for queries. For more information, see Using Query of Queries.

When retrieving data from a database, perform the following tasks:

  • To tell ColdFusion how to connect to a database, use the cfquery tag on a page.
  • To specify the data that you want to retrieve from the database, write SQL commands inside the cfquery block.
  • Reference the query object and use its data values in any tag that presents data, such as cfoutputcfgridcftablecfgraph, or cftree.

The cfquery tag

The  cfquery  tag is one of the most frequently used CFML tags. You use it to retrieve and reference the data returned from a query. When ColdFusion encounters a  cfquery  tag on a page, it does the following:

  • Connects to the specified data source.
  • Performs SQL commands that are enclosed within the block.
  • Returns result set values to the page in a query object.

The cfquery tag syntax

The following code shows the syntax for the  cfquery  tag:

SQL code...
</cfquery>

In this example, the query code tells ColdFusion to do the following:

  • Connect to the  cfdocexamples  data source (the cfdocexamples.mdb database).
  • Execute SQL code that you specify.
  • Store the retrieved data in the query object EmpList.

When creating queries to retrieve data, keep in mind the following guidelines:

  • Use opening <cfquery> and ending </cfquery> tags, because the  cfquery  tag is a block tag.
  • Enter the query name and  datasource  attributes within the opening  cfquery  tag.
  • To tell the database what to process  during  the query, place SQL statements inside the  cfquery  block.
  • When referencing text literals in SQL, use single-quotation marks ('). For example, SELECT * FROM  mytable  WHERE FirstName='Jacob' selects every record from  mytable  in which the first name is Jacob.
  • Surround attribute values with double quotation marks ("attrib_value").
  • Make sure that a data source exists in the ColdFusion Administrator before you reference it in a  cfquery  tag.
  • Columns and tables that you refer to in your SQL statement must exist,  otherwise  the query fails.
  • Reference the query data by naming the query in one of the presentation tags, such as  cfoutput cfgrid cftable cfgraph , or  cftree .
  • When ColdFusion returns database columns, it removes table and owner prefixes. For example, if you query Employee.Emp_ID in the query, the Employee, is removed and returns as Emp_ID. You can use an alias to handle duplicate column names; for more information, see Using Query of Queries.
  • You cannot use SQL reserved words, such as MIN, MAX, COUNT, in a SQL statement. Because reserved words are database-dependent, see the documentation of your database for a list of reserved words.
  • If you use COMPUTE AVG() in your SQL, ColdFusion returns avg() as the column name. (Previous versions (ColdFusion 5 and ColdFusion MX 7) returned ave() as the column name.)
  • To retrieve results returned by database triggers, add the following connection parameter in the connection string:

    AlwaysReportTriggerResults=true

    This parameter determines how the driver reports results generated by database triggers (procedures that are stored in the database and executed, or fired, when a table is modified). For Microsoft SQL Server 2005, this includes triggers fired by Data Definition Language (DDL) events. If set to true, the driver returns all results, including results generated by triggers. Multiple trigger results are returned one at a time. Use the method Statement.getMoreResults to retrieve individual trigger results. Warnings and errors are reported in the results as they are encountered.

Building queries

As discussed earlier, you build queries by using the  cfquery  tag and SQL.

Note:

This procedure and many subsequent procedures use the cfdocexamples data source that connects to the cfdocexamples.mdb database. This data source is installed by default. For information on adding or configuring a data source, see Configuring and Administering ColdFusion.

Query the table

  1. Create a ColdFusion page with the following content:

    <head>
    <title>Employee List</title>
    </head>
    <body>
    <h1>Employee List</h1>
    <cfquery name="EmpList" datasource="cfdocexamples">
    SELECT FirstName, LastName, Salary, Contract
    FROM Employee
    </cfquery>
    </body>
    </html>
    Note:

    Adobe recommends that you create structured, reusable code by placing queries in ColdFusion_ components; however, for simplicity, the examples here include the query in the body of the_ ColdFusion_ page. For more information about using_ ColdFusion components, see Building and Using ColdFusion Components.

  2. Save the page as emplist.cfm in the myapps directory under your web_root directory. For example, the default path on a Windows computer would be: C:\CFusion\wwwroot\myapps\

  3. Enter the following URL in your web browser:http://localhost/myapps/emplist.cfm. Only the header appears.

  4. View the source in the browser.ColdFusion creates the EmpList data set, but only HTML and text return to the browser. When you view the page's source, you see only HTML tags and the heading "Employee List." To display the data set on the page, use code tags and variables to output the data.

Reviewing the code

The query you just created retrieves data from the cfdocexamples database. The following table describes the highlighted code and its function:

Code

Description

<cfquery name="EmpList" datasource="cfdocexamples">

Queries the database specified in the cfdocexamples data source.

SELECT FirstName, LastName, Salary, ContractFROM Employee

Gets information from the FirstName, LastName, Salary, and Contract fields in the Employee table.

</cfquery>

Ends the cfquery block.

Get help faster and easier

New user?