The following example shows the cftry
and cfcatch
tags. It uses the cfdocexamples data source, which many of the examples in this manual use, and a sample included file, includeme.cfm.
If an exception occurs during the cfquery
statement's execution, the application page flow switches to the cfcatch
type
="Database"
exception handler. It then resumes with the next statement after the cftry
block, once the cfcatch
type
="Database"
handler completes. Similarly, the cfcatch
type
="MissingInclude"
block handles exceptions raised by the cfinclude
tag.
<!--- Wrap code you want to check in a cftry block --->
<cfset EmpID=3>
<cfparam name="errorCaught" default="">
<cftry>
<cfquery name="test" datasource="cfdocexamples">
SELECT Dept_ID, FirstName, LastName
FROM Employee
WHERE Emp_ID=#EmpID#
</cfquery>
<html>
<head>
<title>Test cftry/cfcatch</title>
</head>
<body>
<cfinclude template="includeme.cfm">
<cfoutput query="test">
<p>Department: #Dept_ID#<br>
Last Name: #LastName#<br>
First Name: #FirstName#</p>
</cfoutput>
<!--- Use cfcatch to test for missing included files. --->
<!--- Print Message and Detail error messages. --->
<!--- Block executes only if a MissingInclude exception is thrown. --->
<cfcatch type="MissingInclude">
<h1>Missing Include File</h1>
<cfoutput>
<ul>
<li><b>Message:</b> #cfcatch.Message#
<li><b>Detail:</b> #cfcatch.Detail#
<li><b>File name:</b> #cfcatch.MissingFileName#
</ul>
</cfoutput>
<cfset errorCaught = "MissingInclude">
</cfcatch>
<!--- Use cfcatch to test for database errors.--->
<!--- Print error messages. --->
<!--- Block executes only if a Database exception is thrown. --->
<cfcatch type="Database">
<h1>Database Error</h1>
<cfoutput>
<ul>
<li><b>Message:</b> #cfcatch.Message#
<li><b>Native error code:</b> #cfcatch.NativeErrorCode#
<li><b>SQLState:</b> #cfcatch.SQLState#
<li><b>Detail:</b> #cfcatch.Detail#
</ul>
</cfoutput>
<cfset errorCaught = "Database">
</cfcatch>
<!--- Use cfcatch with type="Any" --->
<!--- to find unexpected exceptions. --->
<cfcatch type="Any">
<cfoutput>
<hr>
<h1>Other Error: #cfcatch.Type#</h1>
<ul>
<li><b>Message:</b> #cfcatch.Message#
<li><b>Detail:</b> #cfcatch.Detail#
</ul>
</cfoutput>
<cfset errorCaught = "General Exception">
</cfcatch>
</body>
</html>
</cftry>
Use the following procedure to test the code.
cfcatch type="MissingInclude"
block displays the error.
cfquery
tag, change the line:
FROM Employee
to:
FROM Employer
Display the page. This time the cfcatch type="Database"
block displays an error message.
Change the cfoutput
line:
<p>Department: #Dept_ID#<br>
to:
<p>Department: #DepartmentID#<br>
Display the page. This time the cfcatch type="Any"
block displays an error message indicating an expression error.
Open \CFusion\Log\MyAppPage.log in your text editor. You should see a header line, an initialization line, and four detail lines, similar to the following:
"Severity","ThreadID","Date","Time","Application","Message" "Information","web-0","11/20/01", "16:27:08",, "cf_root\runtime\servers\default\logs\ MyAppPage.log initialized" "Information","web-0","11/20/01","16:27:08",,
"Page: web_root/MYStuff/MyDocs/ cftryexample.cfm Error: MissingInclude" "Information","web-1","11/20/01","16:27:32",,"
Page: web_root/MYStuff/MyDocs/ cftryexample.cfm Error: " "Information","web-0","11/20/01","16:27:49",,
"Page: web_root/MYStuff/MyDocs/ cftryexample.cfm Error: Database" "Information","web-1","11/20/01","16:28:21",,
"Page: web_root/MYStuff/MyDocs/ cftryexample.cfm Error: General Exception" "Information","web-0","11/20/01","16:28:49",,
"Page: web_root/MYStuff/MyDocs/ cftryexample.cfm Error: "
The following table describes the code:
Code | Description |
---|---|
|
Initializes the employee ID to a valid value. An application would get the value from a form or other source. Sets the default There is no need to put these lines in a |
|
Starts the Queries the cfdocexamples database to get the data for the employee identified by the |
|
Begins the HTML page. This section contains all the code that displays information if no errors occur. Includes the includeme.cfm page. Displays the user information record from the test query. |
|
Handles exceptions thrown when a page specified by the Displays Sets the |
|
Handles exceptions thrown when accessing a database. Displays Sets the
|
|
Handles any other exceptions generated in the Since the error can occur after information has displayed (in this case, the contents of the include file), draws a line before writing the message text. Displays the ColdFusion basic and detailed error message. Sets the |
|
Ends the HTML page, then the |