91m2中对DB进行了一次封装的DBHelpUtil工具类

2016-09-26 19:46:29来源:CSDN作者:q1027458229人点击

在91M2中使用了数据库的都知道,需要interface uses DB单元,而数据库无非四种操作(增、删、改、查

以下给这四种操作举一些简单的例子:

假如现有一个数据库名字叫做xxm2,其中有一个give表,其中存放了giveId(唯一Id,主键,integer,自增长),sellName(卖家姓名 string),buyName(买家姓名 string),itemName(物品名字 string),price(物品价格 integer),giveTime(交易时间 string)这四个字段。

首先需要先应用xxm2数据库,然后才能对表进行操作。

1、插入一条记录。要求:卖家:我是卖家,卖家:我是买家,物品是裁决之杖,价格是100元宝,交易时间是2016-09-19 15:20

增:insert into give(sellName,buyName,itemName,price,giveTime) values ('我是卖家','我是买家','裁决之杖',100,'2016-09-19 15:20');

2、删除一条记录。要求:删除所有小于100元宝的裁决之杖记录

删:delete from give where price<100 and itemName='裁决之杖';

3、修改一条记录。要求:裁决之杖的所有交易时间改到2016-09-01 12:00

改:update student set giveTime='2016-09-01 12:00' where itemName='裁决之杖';

4、查询一条记录

查询这里就不介绍了。


最后拼接成了对应的sql语句后,使用Gamelib.DBEngine.ExecSQL(连接名字,sql);就可以实现增、删、改了。


但是这里有一个问题:

如果字段少,拼接起来还好说,如果字段多20-30个字段的情况下。拼接起来简直头疼,维护起来也是极其蛋疼的。不但要注意

1、逗号是否少写了。2、格式是否对。3、还要注意字符串字段单引号有没有少加了。

因此我就做了一个数据库工具类,方便大家使用。


废话不多说,直接上代码,如果需要使用,可以直接复制到引擎中即可。

外部调用,直接implementation uses DBHelpUtil;

然后直接调动,以下这三个方法即可。


插入:function InsertSQL(dbName , tableName : string ; valuesList : ContentValueList) : boolean;
删除:function DeleteSQL(dbName , tableName ,whereCause: string ; whereList : ContentValueList) : boolean;
更新:function UpdateSQL(dbName , tableName : string ; valuesList :ContentValueList ; whereCause : string ;whereList : 


若想直接下载完整代码,请点击这里[点击打开链接]

unit DBHelpUtil;interface  uses Classes, SysUtils , DB;const KIND_INTEGER = 1;const KIND_STRING = 2;function InsertSQL(dbName , tableName : string ; valuesList : ContentValueList) : boolean;function DeleteSQL(dbName , tableName ,whereCause: string ; whereList : ContentValueList) : boolean;function UpdateSQL(dbName , tableName : string ; valuesList :ContentValueList ; whereCause : string ;whereList : ContentValueList) : boolean;type	ContentValue = class  public   	key : string;    kind : integer;    value : string;      constructor Create;          	    destructor Destroy; override;  end;type	ContentValueList = class  public   	list : TList;      function getCount() : integer;     function getItem(p : integer) : ContentValue;    procedure addString(keyxx,valuexx : string);     procedure addWhereString(valuexx : string);     procedure addWhereInteger(valuexx : integer);    procedure addInteger(keyxx : string ; valuexx : integer);    constructor Create;          	    destructor Destroy; override;  end;  implementation uses StringUtil;function GetSubStrCounts(AStr,ASubStr: string): Integer;var  i: Integer;begin  Result := (length(AStr)-length(StringReplace(AStr,ASubstr,'',[rfReplaceAll, rfIgnoreCase]))) div length(asubstr);end;procedure test(Npc: TNormNpc; Player: TPlayObject);vartest1,test2,test3,test4: ContentValueList;begin		test1 := ContentValueList.create;      //addString还是addInteger是根据数据库字段来的。    test1.addString('goodName','123');    test1.addInteger('status',0);        DBHelpUtil.InsertSQL('cqdb','goodsneed',test1);     //产生的sql是:insert into goodsneed(goodName,status) values ('123',0);            DBHelpUtil.DeleteSQL('cqdb','goodsneed','',nil);    //产生的sql是:delete from goodsneed;            test2 := ContentValueList.create;    test2.addWhereInteger(125);     test2.addWhereString('小红');     test2.addWhereInteger(100000);       DBHelpUtil.DeleteSQL('cqdb','goodsneed','id=$ and name=$ and price<$',test2);     //产生的sql是,delete from goodsneed where id=125 and name='小红' and price<100000             test3 := ContentValueList.create;    test3.addString('goodName','123');    test3.addInteger('status',0);    DBHelpUtil.UpdateSQL('cqdb','goodsneed',test3,'',nil);    //产生的sql是,update goodsneedgoodName='123' , status=0                 	test4 := ContentValueList.create;    test4.addWhereInteger(125);     test4.addWhereString('小红');      DBHelpUtil.UpdateSQL('cqdb','goodsneed',test3,'id=$ and name=$',test4);     DBHelpUtil.UpdateSQL('cqdb','goodsneed',test3,'id=123 and name=''小红''',test4);     DBHelpUtil.UpdateSQL('cqdb','goodsneed',test3,'id=123 and name=''小红''',nil);    //以上3种方式产生的sql都是,update goodsneedgoodName='123' , status=0 where id=125 and name='小红'     //规则是'id=$ and name=$',如果从其中发现一个$符号,则从后面test中取一个值。                //用完记得一定要释放    FreeAndNil(test1);    FreeAndNil(test2);     FreeAndNil(test3);     FreeAndNil(test4);  end;function InsertSQL(dbName , tableName : string ; valuesList : ContentValueList) : boolean;varsql : string;keyStr , valueStr : string;I : integer;content : ContentValue;begin    if (valuesList = nil) or (valuesList.getCount = 0) then    begin      	Result := false;    end    else    begin     		keyStr := '';        valueStr := '';        for I:=0 to valuesList.getCount-1 do        begin         		content := valuesList.getItem(I);          	keyStr := keyStr + content.key;            if content.kind = KIND_INTEGER then            begin            		valueStr := valueStr+content.value;              end            else            begin                valueStr := valueStr+''''+content.value+'''';             end;                               if I <> valuesList.getCount-1 then            begin            		keyStr := keyStr + ',';                valueStr := valueStr + ',';              end;        end;         sql := 'insert into '+tableName+' ('+keyStr+') values ('+valueStr+')';         Result := Gamelib.DBEngine.ExecSQL(dbName,sql);    end;       end;function DeleteSQL(dbName , tableName ,whereCause: string ; whereList : ContentValueList) : boolean;varsql : string;I : integer;whereItem : ContentValue;count : integer;args : array of const;begin		sql := 'delete from '+tableName;     if whereCause <> '' then    begin    		count := GetSubStrCounts(whereCause,'$');	        if count > 0 then        begin         		SetLength(args,count);        		whereCause := whereCause.Replace('$','%s');        		for I:=0 to count-1 do            begin                 if (whereList <> nil) and (I < whereList.getCount) then                begin                         		whereItem := whereList.getItem(I);                    if whereItem.kind = KIND_INTEGER then                    begin                          args[I] := whereItem.value;                     end                    else                    begin                          args[I] :=''''+whereItem.value+'''';            				end;                  end                else                begin                      args[I] := '$';                end;             end;        end;	        sql := sql +' where ' + format(whereCause,args);        end;//		debug('delete sql='+sql);    Result := Gamelib.DBEngine.ExecSQL(dbName,sql);end;function UpdateSQL(dbName , tableName : string ; valuesList :ContentValueList ; whereCause : string ;whereList : ContentValueList) : boolean;varsql : string;sql1,sql2 : string;I,count : integer;content,whereItem : ContentValue;args : array of const;begin		if (valuesList = nil) or (valuesList.getCount = 0) then    begin      	Result := false;    end                    else    begin    		sql := 'update '+tableName+' set ';    		sql1 := '';        sql2 := '';        for I:=0 to valuesList.getCount-1 do        begin         		content := valuesList.getItem(I);            if content.kind = KIND_INTEGER then            begin             		sql1 := sql1 + content.key+'='+content.value;            end            else            begin                sql1 := sql1 + content.key+'='''+content.value+'''';             end;                   if I <> valuesList.getCount-1 then            begin            		sql1 := sql1 + ' , ';            end;        end;         if whereCause <> '' then        begin            count := StringUtil.GetSubStrCounts(whereCause,'$');	            if count > 0 then            begin                 SetLength(args,count);                whereCause := whereCause.Replace('$','%s');                for I:=0 to count-1 do                begin                     if (whereList <> nil) and (I < whereList.getCount) then                    begin                                 whereItem := whereList.getItem(I);                        if whereItem.kind = KIND_INTEGER then                        begin                              args[I] := whereItem.value;                         end                        else                        begin                              args[I] :=''''+whereItem.value+'''';                        end;                      end                    else                    begin                          args[I] := '$';                    end;                 end;                 sql2 := sql2 +' where ' + format(whereCause,args);                end            else            begin              	sql2 := sql2 +' where ' + whereCause;              end;        end;        sql := sql + sql1 + sql2;          debug('update sql = '+sql);         Result := Gamelib.DBEngine.ExecSQL(dbName,sql);    end;end;constructor ContentValueList.Create;begin   	list := TList.Create;end;function ContentValueList.getCount() : integer;begin   	Result :=  list.count;end;function ContentValueList.getItem(p : integer) : ContentValue;begin   	Result :=  ContentValue(list[p]);end;procedure ContentValueList.addWhereString(valuexx : string); varvalue : ContentValue;begin   	value := ContentValue.Create;   	value.key := '';    value.kind := KIND_STRING;    value.value := valuexx;    list.Add(value);end;procedure ContentValueList.addWhereInteger(valuexx : integer);varvalue : ContentValue;begin		value := ContentValue.Create;   	value.key := '';    value.kind := KIND_INTEGER;    value.value := IntToStr(valuexx);        list.Add(value);end;procedure ContentValueList.addString(keyxx,valuexx : string);varvalue : ContentValue;begin   	value := ContentValue.Create;   	value.key := keyxx;    value.kind := KIND_STRING;    value.value := valuexx;    list.Add(value);end;procedure ContentValueList.addInteger(keyxx : string ; valuexx : integer);varvalue : ContentValue;begin		value := ContentValue.Create;   	value.key := keyxx;    value.kind := KIND_INTEGER;    value.value := IntToStr(valuexx);        list.Add(value);end;constructor ContentValueList.Destroy;varI : integer;c : ContentValue;begin		for I:=0 to list.Count-1 do    begin      		c := ContentValue(list[I]);          FreeAndNil(c);    end;      FreeAndNil(list);		inherited;end;constructor ContentValue.Create;begin   	key := '';    kind := 0;    value := '';end;constructor ContentValue.Destroy;begin		inherited;end;end.



最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台