众所众知 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.
该博客介绍了如何在Delphi中创建一个数据连接池,包括维护一个容器来存储数据连接,根据需要创建或复用数据源,以及一些实现细节。示例代码展示了创建和获取池中对象的基本操作。
1121

被折叠的 条评论
为什么被折叠?



