270 likes | 351 Views
CF Database I. Jeff Peters jeff@grokfusebox.com. Why Are You Here?. Data and Persistence ODBC Relational vs. Flat SQL CFQUERY, CFOUTPUT, CFLOOP Practicum. Data and Persistence. Persistence = Turn off, turn on—data still there. Secondary storage (disk or other nonvolatile) DBMS Excel
E N D
CF Database I • Jeff Peters • jeff@grokfusebox.com
Why Are You Here? • Data and Persistence • ODBC • Relational vs. Flat • SQL • CFQUERY, CFOUTPUT, CFLOOP • Practicum
Data and Persistence • Persistence = Turn off, turn on—data still there. • Secondary storage (disk or other nonvolatile) • DBMS • Excel • Text file
ODBC • Open DataBase Connectivity • Allows a common interface to many databases. • Does not homogenize SQL • Must be configured on the CF server
Relational vs. Flat • Relational: Tables may be linked (related) to make storage more efficient. • E.F. Codd • Flat: Tables cannot be linked. Think of a spreadsheet.
CFQUERY • Allows any SQL statement to be run. • Returns a recordset depending on SQL. • Can pass authentication attributes: • USERNAME • PASSWORD • Can cache data for better performance.
CFOUTPUT • Refers to a CFQUERY recordset to generate output to the browser. • May be nested using the GROUP attribute. • May NOT be nested without the GROUP attribute (see CFLOOP).
CFLOOP • Refers to a CFQUERY recordset; does not produce output to the browser. • CFLOOP may also be used for incremental loops, lists, and objects—not the scope of this session.
SQL • Structured Query Language • Common syntax for interacting with a database. (Beware variations) • SELECT, INSERT, UPDATE, DELETE • More complex commands available; related to DBA functions.
Caching Queries • Improves performance by storing data in server memory. • Implemented through CFQUERY • CACHEDWITHIN attribute
Practicum – ODBC • MS Access: CFDB101 • webroot\cfun03\CFDB101.mdb • MS Excel: CFDB101Excel • webroot\cfun03\Members.xls • Text File: CFDB101Text • webroot\cfun03\TextDB\Members
Practicum – CFQUERY • SELECT • INSERT • DELETE • UPDATE
Practicum – CFQUERYSELECT <cfquery name="qryGetMembers" datasource="CFDB101" dbtype="ODBC"> SELECT memberNumber, lastName, firstName, email, phone, memberSince FROM Members </cfquery> <cfdump var="#qryGetMembers#">
Practicum – CFQUERYINSERT <cfquery datasource="CFDB101" dbtype="ODBC"> INSERT INTO Members ( memberNumber, lastName, firstName, email, phone, memberSince ) VALUES ( 4, 'Adams', 'John Q.', 'jqada@grokfusebox.com', '7035554444', #CreateODBCDate(Now())# ) </cfquery>
Practicum – CFQUERYDELETE <cfquery datasource="CFDB101" dbtype="ODBC"> DELETE FROM Members WHERE memberNumber = '4' </cfquery>
Practicum – CFQUERYUPDATE <cfquery datasource="CFDB101" dbtype="ODBC"> UPDATE Members SET phone = '7035551212' WHERE memberNumber = '1' </cfquery>
Practicum – CFOUTPUT <cfquery name="qryGetMembers" datasource="CFDB101" dbtype="ODBC"> SELECT lastName, firstName, memberSince FROM Members ORDER BY memberSince </cfquery> <h3> <cfoutput query="qryGetMembers"> <span style="color: red"> #DateFormat(memberSince,"mm/dd/yyyy")# </span>: #firstName# #lastName#<br> </cfoutput> </h3>
Practicum – CFLOOP <cfquery name="qryGetMembers" datasource="CFDB101" dbtype="ODBC"> SELECT lastName, firstName, memberSince FROM Members ORDER BY memberSince </cfquery> <h3> <cfloop query="qryGetMembers"> <cfset memberYears = DateDiff("YYYY",memberSince,Now())> <cfoutput> #firstName# #lastName# - Member for #memberYears# years. <br> </cfoutput> </cfloop> </h3>
Practicum – CFLOOP Thomas Jefferson - Member for 226 years. John Adams - Member for 226 years. George Washington - Member for 226 years.
Practicum – Caching <cfquery name="qryGetMembers" datasource="CFDB101" dbtype="ODBC" cachedwithin="#CreateTimeSpan(1, 0, 0, 0)#"> SELECT memberNumber, lastName, firstName, email, phone, memberSince FROM Members </cfquery>
Bonus – Aqua Data Studio • http://www.aquafold.com • Interfaces with DB2, Informix, MySQL, Oracle, PostgreSQL, SQL Server, SyBase, any JDBC source.