datasnap 数据库连接

datasnap 数据库连接

2011-09-24 13:48:27|  分类: DELPHI |  标签: |举报 |字号大中小 订阅

当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接。这样做将产生大量的数据库连接,并产生很多问题。

DelphiXe,提供了Session管理,更容易实现控制客户端连到服务器的数据库连接。客户端应用程序bu不会知道这些,服务器将完成所有的事情。

当我们创建一个DataSnap服务器时,最好的做法就是定义一个服务器容器(数据模块),其中包含DataSnap服务器组件和注册所有的服务器应用程序所需的类。在这个容器中,我们将定义一个负责处理服务器的数据库连接的方法。

作为一个例子,我已经实现了服务器容器上的一个的getConnection方法。这个方法负责

为连接池分配连接,这将有每一个客户端连接列表寻找,连接池里包含有每个客户端的连接。

private     { Private declarations }     ListofConnection : TDictionary;   public     function GetConnection : TSQLConnection;

当服务器收到来自新的客户端的连接到数据库的请求时,getConnection将创建一个新的连接并添加到

连接池清单。如果客户已经有了一个连接相关联,getConnection则只返回的一个SqlConnection实例

。连接池使用线程ID来控制每个客户端的唯一连接。如果您使用的DataSnap2010,你必须用GetThreadSession方法来实现这个功能。

function TServerContainer1.GetConnection: TSQLConnection; var   dbconn : TSQLConnection; begin

if ListofConnection.ContainsKey(TDSSessionManager.GetThreadSession.Id) then      Result := ListofConnection[TDSSessionManager.GetThreadSession.Id]   else   begin     dbconn := TSQLConnection.Create(nil);     dbconn.Params.Clear;     dbconn.LoadParamsOnConnect := true;     dbconn.ConnectionName := ‘DS Employee‘;

ListofConnection.Add(TDSSessionManager.GetThreadSession.Id, dbconn);     Result := dbconn;   end;

end;

连接定义后,我们需要更新所有数据集使用此连接,这样服务器的所有方法包括create 和运行时的SQL查询都将要调用getConnection方法。

If you are using the VCL Data components (TSQLQuery, TSQLStoredProc, etc…) on your Server DataModules, the onCreate event is a good place to associate the DataSets with the connection, using the following code.

如果您在服务器上DataModules使用VCL的数据组件(TSQLQuery,TSQLStoredProc等...), 在OnCreate事件是一个设置关联数据集的连接的好地方,可以使用下面的代码来设置。

procedure TServerContainer1.SetConnection(Conn: TSqlConnection); var   i: integer; begin   if Conn = nil then      Conn := GetConnection;   else     Conn := Sender;

for i := 0 to ComponentCount - 1 do     if Components[i] is TSQLQuery then        TSQLQuery(Components[i]).SQLConnection := Conn; end;

为了避免数据库连接泄漏,我们实现了DSServer的OnDisconnect事件。当客户端断开连接时这段持续将运行。

if GetConnection <> nil then

时间: 2024-08-04 16:19:33

datasnap 数据库连接的相关文章

论DATASNAP中间件对象池

在此,笔者以DATASNAP为例,其它中间件以此类推. 中间件为什么要使用对象池? 对象池——让所有的对象免堕轮回之苦,对象不再为其生和死而烦恼. 要想让中间件长久稳定地运行,做到无人值守,对象池很重要,对象池大致分为以下几类. 1)线程池,DATASNAP使用INDY10作为其通讯控件,其线程池实际上就是使用INDY10的,只是DATASNAP在其基础上再封装了一层壳罢了,留给我们的只需要设置相关控件的属性即可,在些不多说: 2)服务对象池,DATASNAP向导会生成一个ServerMetho

unigui数据库连接池

http://www.cnblogs.com/hnxxcxg/p/3632675.html unigui数据库连接池 UNIGUI for delphi,是一款WEB RIA开发框架.开发WEB程式如传统C/S般简单,众多DELPHIER趋之若鹜. 虽然上手非常容易,但要真正使用好,有些地方还是值得考究的. 网上有同仁说使用UNIGUI,如果客户端达到200的数量,会致数据库连接用磬,系统不可用.他以为是UNIGUI的并发不行. UNIGUI冤哉!与UNIGUI何关! 究其原因,其使用ADO控件

Delphi2010中DataSnap高级技术

Delphi2010中DataSnap高级技术 日期:2010年12月1日 作者:SUNSTONE原创 人气:13498 查看:[大字体 中字体 小字体]  (1)—为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了. DataSnap有三种服务模式,其中Service Application方式建立的windows服务没有描述,描述部分是空的,感觉总是欠缺点什么. 现找到办法添加描述: p

Delphi 中DataSnap技术网摘

Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了. DataSnap有三种服务模式,其中Service Application方式建立的Windows服务没有描述,描述部分是空的,可用如下方法添加服务描述: procedure TServerContainer.ServiceAfterInstall(Sender: TService);

DataSnap初步二

转:https://blog.csdn.net/a00553344/article/details/51670486 1. 一个典型的DataSnap服务器至少需要三个控件: TDSServer: DataSnap的逻辑核心控件,控制服务器的运行. TDSServerClass: DataSnap服务端服务导出控件,通过OnGetClass事件来导出服务端的类及方法供客户端的远程调用. 作为服务端导出给客户端远程调用的类需要满足以下两个条件: 从TComponent类派生. 需要有{$METHO

JDBC数据库连接池

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. DBCP DataBase Connection Pool资源管理不是非常的好. 一般情况下DiverManager.getConnection获得连接对象 每次都这么做,十分的耗费资源. 为了解决这个问题,于是出现连接池.跟线程池的概念差不多. 线程池: 多个Connection对象被创建了,然后放在池子里面,用的时候直接从池子里面去拿,用完了再放回去.

数据库连接池

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 数据库连接池简介: 数据库连接对象是有限资源,所以数据库连接池是用于负责分配.管理和释放数据库连接对象,它允许应用程序重复使用一个现有的数据库连接对象,而不是再重新建立一个:这一点实际上和线程池的概念差不多.数据库连接池会释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这项技术能明显提高对数据库操作的性能. 不使用

JDBC数据库连接池技术

在JDBC中,获得连接或释放资源是非常消耗系统资源的两个过程,为了解决此类性能问题,通常采用连接池技术,来共享连接.这样我们就不需要每次都创建连接.释放连接了,这些操作都交给了连接池. 用池的概念来管理Connection,这样可以重复使用Connection.有了连接池以后就不用自己亲自创建连接而是通过连接池来获得Connection对象.当使用完Connection之后,调用Connection的close()方法不是真的将连接关闭,而是把Connection归还给连接池.连接池就可以继续保

Druid数据库连接池两种简单使用方式

阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给DataSource对象. 下面给出2种配置方法实例: 1. 纯Java代码创建 DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver&qu