如何在DBX中进行连接池工作?

时间:2012-07-12 22:12:10

标签: delphi connection-pooling dbexpress

好吧,I managed get the delegate driver to set up properly,但连接池仍然给我带来很多麻烦。

根据文档中给出的描述,似乎连接池应该如下:

  • 在单个全局连接对象
  • 上设置DBXPool驱动程序委托
  • 将此Connection对象用于对数据库的所有调用
  • 每个数据库调用都将通过委托驱动程序自动路由到由其连接池拥有的线程唯一的连接。

实际上,我发现一切似乎仍然由全局Connection对象处理,当我尝试从多个并发线程运行数据库查询时,会导致各种奇怪的竞争条件和崩溃。

如果它是相关的,我没有定义许多特定于DBX的组件;我通常通过调用Connection.Execute方法运行查询。

知道我做错了什么吗?我在某个地方错过了一个步骤,或者我对DBXPool委托驱动程序的工作方式有不妥的理解?

1 个答案:

答案 0 :(得分:2)

Delphi附带了一个示例项目DelegatesSample。在我的机器上,它位于\ Documents \ RAD Studio \ 8.0 \ Samples \ Delphi \ Database \ dbExpress \ Delegates下。

池中的每个连接都有自己的 TDBXConnection对象。在示例源代码中,每个连接都是通过调用TDBXConnectionFactory.GetConnectionFactory.GetConnection()创建的。

正如您所知,线程中的每个查询都应该拥有自己的连接对象。

Felix Colibri对Delphi DBX4编程也有很好的article。他在其他主题中描述了使用池代理驱动程序汇集数据库连接。

至少这些示例帮助我了解连接池的工作原理!