【问题标题】:How do I make connection pooling work in DBX?如何使连接池在 DBX 中工作?
【发布时间】:2012-07-12 22:12:09
【问题描述】:

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

从文档中给出的描述来看,连接池似乎应该像这样工作:

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

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

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

知道我做错了什么吗?我是否在某处遗漏了一步,或者我对 DBXPool 委托驱动程序的工作原理了解甚少?

【问题讨论】:

    标签: delphi connection-pooling dbexpress


    【解决方案1】:

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

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

    您当然知道,线程中的每个查询都应该有自己的连接对象。

    Felix Colibri 也有关于 Delphi DBX4 编程的精彩 article。在那里,他还描述了使用池委托驱动程序池数据库连接的其他主题。

    至少这些样本有助于我理解连接池的工作原理!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多