ColdFusionMX Basic Tag編程之二
版權(quán)所有 請勿轉(zhuǎn)載:
系統(tǒng)及環(huán)境需求:
- Window2000/XP
- 256M RAM
- Coldfusion MX(Developer Edition)
- Microsoft Access
- 任何一款文本編輯器(本教程默認為Coldfusion Studio 5 + DreamweaverMX)
- 本教程采用 Coldfusion Standalone的模式,端口為8500。如需要采用IIS捆綁方式,請在安裝過程中修改即可。
序言
今天要講一下Coldfuison5和coldfusionMX的基本區(qū)別。Coldfusion5以前的版本(包括coldfusion5)還是一個以編程腳本為主的語言,這種語言提供了由特定的coldfusion server來進行腳本解釋和程序維護的功能,Coldfusion5以前的版本核心是不具備J2EE體系核心的。ColdfusionMX我們在第一期的教程中就知道了它是基于J2EE的核心基礎(chǔ)架構(gòu),在此之上,具備了一些內(nèi)置的功能強大的企業(yè)開發(fā)包和Tag集合,其中包括了整合了Generator部分功能的最新的cfchart,這個新標簽?zāi)軌蚪鉀Q在開發(fā)企業(yè)應(yīng)用時最重要的報表圖形的生成功能,此外還包括了一個完全版的全文搜索引擎,融合了新的開發(fā)方式的cf component以及web services的支持。所以,我們可以把coldfusion5到coldfusionmx看作是一次飛躍。一次從單純的腳本環(huán)境到企業(yè)級應(yīng)用的飛躍。
另外,coldfusionMX里面有很多的變化,類似于flashMX的action一樣,有很多tag從coldfusion5演變到coldfusionMX之后就有一些屬性發(fā)生了變化,如果不了解這些變化,硬把coldfusion5編寫的程序往MX上套,是會出錯的。好了,那我們開始這一期的教程。
第一部分 Basic tag編程深入
上一期我們講了操作數(shù)據(jù)庫的第一個重要的標簽,cfquery。但是我們只是講解了如何使用cfquery進行數(shù)據(jù)庫的查詢,現(xiàn)在我們深入講解一下cfquery的作用,然后在來講解另外兩個操作數(shù)據(jù)庫的標簽cfinsert和cfupdate。
先來看看cfsnippets這個數(shù)據(jù)庫中employees這個表的構(gòu)造。
隨著教程的深入,代碼的編寫采用verdana字體的8號,并且使用籃色,請學(xué)習(xí)者注意。
我們可以使用cfquery來做數(shù)據(jù)的插入,編寫的形式非常的簡單,代碼的方式如下:
<CFTRANSACTION> < CFQUERY NAME="test" DATASOURCE="cfsnippets"> Insert Into Employees(FirstName,lastname,email,phone,department) Values('Mj','king','mjking@263.net','1234567','Technical') < /CFQUERY> < CFQUERY NAME="test" DATASOURCE="cfsnippets"> Select MAX(Emp_id) as number_id From Employees < /CFQUERY> < /CFTRANSACTION> 插入數(shù)據(jù)成功! 你新插入的id是: < cfoutput query="test">#number_id#</cfoutput>
下面我們來講解一下上面的這一段代碼,其中最主要的部分是應(yīng)用了兩個cfquery的標簽的組合,實現(xiàn)了數(shù)據(jù)插入和最新插入的員工id的查詢。其中第一個cfquery插入了一組記錄到Employees這個table里去,除了沒有處理emp_id這個默認的員工id的自增主鍵之外,其他的幾個字段都對應(yīng)給予了插入。在插入之后,第二個cfquery做的是將剛剛插入的記錄的emp_id給查詢出來。比如我們要開發(fā)一個內(nèi)部網(wǎng)的員工模塊,有可能在做了新員工的輸入之后,馬上系統(tǒng)要告知該員工的工號,就可以采用這種方式。但是會有一個問題,如果你在請求server做insert的同時,有另外一個人正好剛剛做完insert,正要查詢出他的id,這樣有可能查出的id是你的,因為這時候,系統(tǒng)有可能響應(yīng)給對方你剛做完insert的記錄的emp_id的值。為了避免這樣的現(xiàn)象發(fā)現(xiàn),我們在兩個cfquery之外使用了Cftransaction這個標簽。
Cftransaction是一個協(xié)調(diào)事務(wù)處理的標簽,它把處理不同事務(wù)的作為一個整體,如果其中的某一個操作不成功,那么所有的操作都會被服務(wù)器還原(就是roll back),有這樣的功能真的是太好了。
另外,使用cfquery還可以進行數(shù)據(jù)庫的update,讓我們來看下面的代碼: <Cfparam name="URL.number_id" default="20"> <Cfquery name="test" datasource="cfsnippets"> Select emp_id From Employees Where emp_id=#URL.number_id# </Cfquery> <cfoutput>#test.emp_id#</cfoutput> <cfoutput>#test.recordcount#</cfoutput> <Cfif test.RecordCount EQ 0> 沒有這個員工記錄 <Cfabort> </Cfif>
<!--- 進行數(shù)據(jù)庫更新 ---> <Cfquery name="test" datasource="cfsnippets"> Update Employees Set FirstName='Zerlot', LastName='Ma', email='zerlot.ma@hdtworld.com', phone='7654321' department='market' Where emp_id=#URL.number_id# </Cfquery> <cfoutput>更新成功!</cfoutput>
好,我們使用cfquery做成功了insert和update,那么下面我們開始講解cfinsert和cfupdate這兩個標簽。
在開始講解之前,我們將簡要說明一下access操作中文的問題,目前從access數(shù)據(jù)庫中把中文顯示出來還沒有解決方案,至少到2002年7月還沒有。但是,進行access數(shù)據(jù)庫的插入已經(jīng)可以解決了,解決方式如下:
在你的應(yīng)用根目錄下建立一個application.cfm文件,加入下面這行代碼:
<cfcontent type="text/html; charset=gb2312">
在你的每一個cfm頁面模板的開頭加入下面代碼:
<cfcontent type="text/html; charset=gb2312"> < cfset setEncoding("URL", "gb2312")> < cfset setEncoding("Form", "gb2312")>
然后使用form表單或者cfquery進行插入中文就沒有問題了。但是從access中查詢并顯示某一條中文記錄還是有問題,目前作者還沒有確切的方法。所以作者本人的教程使用access是出于簡單,但是如果是開發(fā)者使用cfmx來開發(fā)應(yīng)用的話,勸各位使用sqlserver和oracle的企業(yè)數(shù)據(jù)庫,這些數(shù)據(jù)庫都沒有什么問題。
Cfinsert和cfupdate是coldfusion中兩個常用的tag,通過點擊DreamweaverMX中CFbasic的兩個圖標來操作它們。
點擊圖標,將執(zhí)行cfinsert這個標簽的設(shè)定功能。點擊后的窗口如下所示:
以上經(jīng)常用到的屬性是datasource、tablename和Formfields三個屬性,其中datasource是你在coldfusion administrator數(shù)據(jù)源設(shè)定中設(shè)置好的名稱,tablename是要更新的表,F(xiàn)ormfields是和數(shù)據(jù)庫表中字段對應(yīng)名稱一致的form控件名稱(注意必須一致才行)。我們看下面的列子:
<!--- 下面的代碼使用了cfinsert更新了數(shù)據(jù)表格,沒有使用cfquery---> < !--- 如果表單有提交的動作,那么開始處理cfinsert動作---> < cfif IsDefined ("form.posted")> < cfinsert dataSource = "cfsnippets" tableName = "Comments" formFields = "Email,FromUser,Subject,MessText,Posted"> < h3><I>你的記錄已經(jīng)被提交。</i></h3> < /cfif> < !--- 使用cfquery顯示插入數(shù)據(jù) ---> < cfquery name = "GetComments" dataSource = "cfsnippets"> SELECT CommentID, EMail, FromUser, Subject, CommtType, MessText, Posted, Processed FROM Comments < /cfquery> < html> < head></head> < h3>cfinsert</h3> < !--- 顯示數(shù)據(jù) ---> < table> < tr> < td>From User</td><td>Subject</td><td>Comment Type</td> < td>Message</td><td>Date Posted</td> < /tr> < cfoutput query = "GetComments"> < tr> < td valign = top><a href = "mailto:#Email#">#FromUser#</A></td> < td valign = top>#Subject#</td> < td valign = top>#CommtType#</td> < td valign = top><font size = "-2">#Left(MessText, 125)#</font></td> < td valign = top>#Posted#</td> < /tr> < /cfoutput> < /table> < p>Next, we’ll offer the opportunity to enter a comment: < !---輸入表單---> < form action = "cfinsert.cfm" method = "post"> < pre> Email: <input type = "Text" name = "email"> From: <input type = "Text" name = "fromUser"> Subject:<input type = "Text" name = "subject"> Message:<textarea name = "MessText" COLS = "40" ROWS = "6"></textarea> Date Posted: <cfoutput>#DateFormat(Now())#</cfoutput> < !---動態(tài)顯示時間---> < input type = "hidden" name = "posted" value = "<cfoutput>#Now()#</cfoutput>"> < /pre> < input type = "Submit" name = "" value = "insert my comment"> < /form>
那么我們執(zhí)行的結(jié)果可以看到瀏覽器顯示了我們剛剛輸入的信息,這里作者就不給出截圖,目的是讓大家自己去執(zhí)行,自己去查看結(jié)果,注意,本數(shù)據(jù)庫為access,應(yīng)用程序不支持中文,如果各位想測試中文,可以構(gòu)建自己的應(yīng)用程序來測試中文(使用sqlserver),只須在每個頁面的開頭中加入如下代碼即可:
<cfprocessingdirective pageencoding="gb2312"> < cfcontent type="text/html; charset=gb2312"> < cfset setEncoding("URL", "gb2312")> < cfset setEncoding("Form", "gb2312")>
出處:
責(zé)任編輯:藍色
上一頁 下一頁 ColdFusionMX Basic Tag編程 續(xù)二
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|