栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

DELPHI 创建数据池

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DELPHI 创建数据池

众所众知  JAVA的数据池非常流行   

那么如何用DELPHI实现呢  ,这里提供个大概思路 

一 首先要有一个容器 能保存数据连接  

二 当调用的数据源不再当前容器  ,需要重新创建 ,存在则调出

三 其它的细节 例如最大个数 等细节就不在这里实现了  

样例代码如下 :

unit Utils.Pools;

interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes,
  FMX.Controls, FMX.Forms, System.Contnrs;
type
  TControlClass = class of TControl;

  TPoolsTool = class(TPersistent)
  private
    FList : TComponentList;
    function newPoolObject(TControlName:string):TControl;    //创建新资源
    function getPoolObject(TControlName:string):TControl;    //获取池中资源
  public
    constructor Create(); virtual;
    destructor  Destroy ;override;
    procedure clearPoolList;
    function MaperPoolObject(TControlName:string):Boolean;
  end;

var PoolsTool: TPoolsTool;

implementation

{ TPoolsTool }

procedure TPoolsTool.clearPoolList;
var
  index: Integer;
  ctl: TControl;
begin
  for index := 0 to FList.Count-1 do
  begin
    ctl := TControl(FList[index]);
    if Assigned(ctl) then
    begin
      FreeAndNil(ctl);
    end;
  end;
end;

constructor TPoolsTool.Create;
begin
  FList :=TComponentList.Create;
end;

destructor TPoolsTool.Destroy;
begin
  clearPoolList;
  FList.Free;
  inherited;
end;

function TPoolsTool.getPoolObject(TControlName: string): TControl;
var
  index: Integer;
  ctl: TControl;
begin
  //建议加锁
  Result :=  nil;
  try
    for index := 0 to FList.Count-1 do
    begin
      ctl := TControl(FList[index]);
      if UpperCase(ctl.ClassName)=UpperCase(TControlName) then
      begin
        Result :=  ctl;
        exit;
      end;
    end;
  finally

  end;

end;


function TPoolsTool.newPoolObject(TControlName: string): TControl;
var
  aClass: TControlClass;
begin
  Result := nil;
  try
    //建议加锁
    aClass := TControlClass(GetClass(TControlName));
    if Assigned(aClass) then
    begin
      Result := aClass.Create(Application);
      aClass.ClassName := TControlName;
      FList.Add(aClass)
    end;
  finally

  end;
end;


function TPoolsTool.MaperPoolObject(TControlName: string): Boolean;
var
  ctl: TControl;
begin
  ctl := getPoolObject(TControlName);
  if ctl=nil then
     ctl := newPoolObject(TControlName);
  Result := ctl;
end;
initialization
  PoolsTool:= TPoolsTool.Create;
finalization
  FreeAndNil(PoolsTool);

end.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号