ColdFusion中的RecordSet Component

http://www.waynedeng.com/blog/showlog.asp?cat_id=25&log_id=500
CF中对数据的操作都是通过CFQuery来进行的,纯粹从便利的角度上来讲远远比不上asp中的recordset object。不过在coldfusion MX里面也有对象了嘛,我们也来自己封装一个简单的recordset Component!

下面是应用示例,熟悉recordset object的不用多说也明白吧?操作起来确实方便。

以下是代码:
<cfscript>
rs=createObject("component","CFNews.model.db.recordset");
rs.getByTable("article","article_source");   //打开recordsource为article_source中名为article的table

writeoutput(rs.getField("title") & "<br>");
rs.MoveNext();
writeoutput(rs.getField("title") & "<br>");
rs.MoveLast();
writeoutput(rs.getField("title") & "<br>");
//添加一个新的记录
rs.addNew();
rs.setField("title","insert test");
rs.setField("content","This is a test");
rs.setField("artileID",8);
rs.setField("img","<img src='aa'>");
rs.update();

//修改第2个记录
rs.rownum=2;
rs.setField("title","update test");
rs.update();
</cfscript>

 

下面是recordset.cfc

CFNews.model.db.RecordSet
Component RecordSet (Recordset class)

hierarchy:WEB-INF.cftags.component
      CFNews.model.db.RecordSet
path:C:/Inetpub/wwwroot/CFNews/model/db/RecordSet.cfc
properties:
methods:addNew, delete, edit, getBySQL, getByTable, getField, moveFirst, moveLast, moveNext, movePrev, setField, update
* - private method

addNew
public addNew ( )

Output: supressed

delete
public delete ( )

Output: supressed

edit
public edit ( )

Output: supressed

getBySQL
public getBySQL ( required string sql, required string recordSource )

get a Query object by a sql sentence

Output: supressed
Parameters:
   sql: string, required, sql
   recordSource: string, required, recordSource

getByTable
public getByTable ( required string tableName, required string recordSource )

get a Query object by a table name

Output: supressed
Parameters:
   tableName: string, required, tableName
   recordSource: string, required, recordSource

getField
public getField ( required string fieldName )

get field value by field name

Output: supressed
Parameters:
   fieldName: string, required, fieldName

moveFirst
public moveFirst ( )

Output: supressed

moveLast
public moveLast ( )

Output: supressed

moveNext
public moveNext ( )

Output: supressed

movePrev
public movePrev ( )

Output: supressed

setField
public setField ( required string fieldName, required string value, string fieldType )

Output: supressed
Parameters:
   fieldName: string, required, fieldName
   value: string, required, value
   fieldType: string, optional, fieldType

update
public update ( string IDName )

Output: supressed
Parameters:
   IDName: string, optional, IDName

以下是代码:
<cfcomponent displayname="Recordset class">
 <cfset this.fields=structNew()>
 <cfset this.tableName="">
 <cfset this.recordSource="">

 <cffunction name="getByTable" access="public" output="false" hint="get a Query object by a table name">
  <cfargument name="tableName" type="string" required="yes">
  <cfargument name="recordSource" type="string" required="yes">
  <cfset this.tableName=arguments.tableName>
  <cfset this.recordSource=arguments.recordSource>
  <cfquery datasource="#this.recordSource#" name="recordSetSelect">
   select * from #this.tableName#
  </cfquery>
  <cfset this.recordSet=recordSetSelect>
  <cfset this.mode="select">
  <cfset this.rownum=1>
 </cffunction>
 <cffunction name="getBySQL" access="public" output="false" hint="get a Query object by a sql sentence">
  <cfargument name="sql" type="string" required="yes">
  <cfargument name="recordSource" type="string" required="yes">
  <cfset this.sql=arguments.sql>
  <cfset this.recordSource=arguments.recordSource>
  <cfquery datasource="#this.recordSource#" name="recordSetSelect">
   #PreserveSingleQuotes(this.sql)#
  </cfquery>
  <cfset this.recordSet=recordSetSelect>
  <cfset this.mode="select">
  <cfset this.rownum=1>
 </cffunction>
 <cffunction name="getField" access="public" output="false" hint="get field value by field name">
  <cfargument name="fieldName" type="string" required="yes">
  <cfset value=evaluate("this.recordSet.#arguments.fieldName#[#this.rownum#]")>
  <cfreturn value>
 </cffunction>
 <cffunction name="setField" access="public" output="false">
  <cfargument name="fieldName" type="string" required="yes">
  <cfargument name="value" type="string" required="yes">
  <cfargument name="fieldType" type="string" required="no">
  <cfif not isdefined("this.fields.#arguments.fieldName#")><cfset tmp=Evaluate("this.fields.#arguments.fieldName#=structNew()")></cfif>
  <cfscript>StructInsert(Evaluate("this.fields.#arguments.fieldName#"),"value",arguments.value,"yes");</cfscript>
  <cfif not isdefined("arguments.fieldType")>
   <cfif isDate(arguments.value)>
    <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='date'")>
   <cfelseif isNumeric(arguments.value)>
    <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='numeric'")>
   <cfelse>
    <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='varchar'")>
   </cfif>
  <cfelse>
   <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='#arguments.fieldType#'")>
  </cfif>
 </cffunction>
 <cffunction name="moveFirst" access="public" output="false">
  <cfset this.rownum=1>
 </cffunction>
 <cffunction name="moveLast" access="public" output="false">
  <cfset this.rownum=this.recordSet.recordcount>
 </cffunction>
 <cffunction name="moveNext" access="public" output="false">
  <cfset this.rownum=this.rownum+1>
  <cfif this.rownum gt this.recordSet.recordcount><cfset this.rownum=this.recordSet.recordcount></cfif>
 </cffunction>
 <cffunction name="movePrev" access="public" output="false">
  <cfset this.rownum=this.rownum-1>
  <cfif this.rownum lt 1><cfset this.rownum=1></cfif>
 </cffunction>
 <cffunction name="addNew" access="public" output="false">
  <cfset this.mode="addnew">
 </cffunction>
 <cffunction name="edit" access="public" output="false">
  <cfset this.mode="edit">
 </cffunction>
 <cffunction name="delete" access="public" output="false">
  <cfif not isdefined("arguments.IDName")><cfset arguments.IDName=ListContainsNoCase(this.recordSet.ColumnList,"id",",")></cfif>
  <cfif arguments.IDName eq ""><cfset arguments.IDName=ListFirst(this.recordSet.ColumnList,",")></cfif>
  <cfquery datasource="#this.recordSource#" name="recordSetDelete">
   delete from #this.tableName#
   where <cfset fv=evaluate("this.recordSet.#arguments.IDName#[#this.rownum#]")>
   <cfif isNumeric(fv)>
    #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_numeric" value="#fv#">
   <cfelse>
    #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_varchar" value="#fv#">
   </cfif>    
  </cfquery>
 </cffunction>
 <cffunction name="update" access="public" output="false">
  <cfargument name="IDName" type="string" required="no">
  <cfset fieldsList=StructKeyList(this.fields,",")>
  <cfset i=1>
  <cfif this.mode eq "addnew">
   <cfquery datasource="#this.recordSource#" name="recordSetInsert">
   insert into
    #this.tableName# (#fieldsList#)
   values(
    <cfloop index="f" list="#fieldsList#" delimiters=",">
     <cfset fv=evaluate("this.fields.#f#.value")><cfset ftype=evaluate("this.fields.#f#.fieldType")>
     <cfif i eq 1><cfset comma=""><cfelse><cfset comma=","></cfif><cfset i=2>
     #comma#<cfqueryparam cfsqltype="cf_sql_#ftype#" value="#fv#">
    </cfloop>)
   </cfquery>
  <cfelseif this.mode eq "edit">
   <cfif not isdefined("arguments.IDName")><cfset arguments.IDName=ListContainsNoCase(this.recordSet.ColumnList,"id",",")></cfif>
   <cfif arguments.IDName eq ""><cfset arguments.IDName=ListFirst(this.recordSet.ColumnList,",")></cfif>
   <cfquery datasource="#this.recordSource#" name="recordSetUpdate">
   update
    #this.tableName#
   set
    <cfloop index="f" list="#fieldsList#" delimiters=",">
     <cfset fv=evaluate("this.fields.#f#.value")><cfset ftype=evaluate("this.fields.#f#.fieldType")>
     <cfif i eq 1><cfset comma=""><cfelse><cfset comma=","></cfif><cfset i=2>
     #comma##f#=<cfqueryparam cfsqltype="cf_sql_#ftype#" value="#fv#">
    </cfloop>
   where <cfset fv=evaluate("this.recordSet.#arguments.IDName#[#this.rownum#]")>
    <cfif isNumeric(fv)>
     #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_numeric" value="#fv#">
    <cfelse>
     #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_varchar" value="#fv#">
    </cfif>    
   </cfquery>
  </cfif>
 </cffunction> 
</cfcomponent>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值