鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > delphi > >

DIOCP开源项目-数据库连接池的使用多帐套数据库

来源:互联网 作者:佚名 时间:2013-10-31 09:01
很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新的代码和Demo。 好了我带大家看看这次的DEMO,经过群里面朋友们

       很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新的代码和Demo。

       好了我带大家看看这次的DEMO,经过群里面朋友们的推荐,这次代码中引用了UntCobblerUniPool连接池代码来完成的本次的DEMO,研究了下代码,里面使用的线程时钟来做死连和多余连接的释放。感谢UntCobblerUniPool作者无私奉献的精神。

      先截个图,看看服务端的界面。

image

主要加入了多帐套的连接的配置。配置文件存放在config\dbpool.config,是一个json格式的文件配置

{
"account2013": {
  "connString": "Provider Name=SQL Server;Data Source=192.168.1.2;Database=xxxx;User ID=sa;Password=sa"
},
"account2012": {
  "connString": "Provider Name=SQL Server;Data Source=192.168.1.2;Database=xxx02;User ID=sa;Password=sa"
}
}

 

DEMO中我演示了两个帐套(实际运行中帐套个数是不固定),account2013和account2012代表帐套的ID,在clientContext中可以通过客户端传递过来的帐套ID,获取连接字符串,到连接池中获取一个连接。

看看服务端的代码

procedure TClientContext.dataReceived(const pvDataObject:TObject); var lvJsonStream:TJSonStream; lvFile:String; lvCmdIndex:Cardinal; lvXMLData, lvEncodeData:AnsiString; lvSQL, lvID:String; lvDBDataOperator:TUniOperator; lvPoolObj:TUniCobbler; begin lvJsonStream := TJSonStream(pvDataObject); try lvCmdIndex := lvJsonStream.JSon.I[]; //执行SQL的命令ID //客户端传递过来的帐套ID lvID := lvJsonStream.Json.S[]; Exception.Create(); end; //客户端指定要执行的SQL lvSQL := lvJsonStream.Json.S[]; Exception.Create(); end; //通过帐套ID获取一个连接池对象 lvPoolObj := TUniPool.getConnObject(lvID); try //打开连接 lvPoolObj.checkConnect; //Uni数据库操作对象<可以改用对象池效率更好> lvDBDataOperator := TUniOperator.Create; try //设置使用的连接池 lvDBDataOperator.Connection := lvPoolObj.ConnObj; self.StateINfo := ; try //获取一个查询的数据 lvXMLData := lvDBDataOperator.CDSProvider.QueryXMLData(lvSQL); self.StateINfo := ; except raise; end; lvJsonStream.Clear(); lvJsonStream.Stream.WriteBuffer(lvXMLData[1], Length(lvXMLData)); lvJsonStream.setResult(True); finally lvDBDataOperator.Free; end; finally //归还连接池 TUniPool.releaseConnObject(lvPoolObj); end; //回写数据给客户端 writeObject(lvJsonStream); //返回数据 writeObject(lvJsonStream); end; except on E:Exception do begin lvJsonStream.Clear(); lvJsonStream.setResult(False); lvJsonStream.setResultMsg(e.Message); writeObject(lvJsonStream); end; end; end;

网友评论
<