coldfusion - 我可以在运行时指定动态数据源吗?

标签 coldfusion coldfusion-11

我的应用程序托管在为许多客户提供服务的中央服务器上。它现在需要与驻留在客户所在地现场的数据库服务器交叉引用信息。

我想将客户服务器的详细信息与其帐户详细信息(例如 dbname、主机、端口等)一起存储。

但是,根据登录到应用程序的用户,我需要将他们的数据连接详细信息提供到 <cfquery> 中。函数以执行查找。像这样的东西:

<cfquery name="rsOrders" datasource="{dynamically provided connection string}">
SELECT *
FROM
CompanysDBTable
</cfquery>

我知道有一个以编程方式创建数据源的管理员 API,但是使用它意味着我的系统中会有一个额外的过程,如果客户更新数据源详细信息会发生什么?

那么有没有办法像上面那样即时完成?即,提供 <cfquery> 内的数据连接字符串标签。

或者有没有更好的方法来完全做到这一点?

最佳答案

您可以在 ColdFusion 11 中在运行时创建特定于应用程序的数据源。请参阅文档:“Application-specific datasources in Application.cfc”。我也在我的博客中讨论过这个问题:“Defining datasources in Application.cfc”。

一个例子是:

// Application.cfc
component {

    this.name = "DSNTest02";
    this.datasources = {
        scratch_mssql_app    = {
            database    = "scratch",
            host        = "localhost",
            port        = "1433",
            driver      = "MSSQLServer",
            username    = "scratch",
            password    = "scratch"
        },
        scratch_embedded_app    = {
            database    = "C:\apps\adobe\ColdFusion\11\full\cfusion\db\scratch",
            driver        = "Apache Derby Embedded"
        }
    };
    this.datasource    = "scratch_mssql_app";

}

这是您可以通过 ColdFusion 获得的最接近的结果。

如果您要直接使用 JDBC,您可以在创建连接时只提供一个连接字符串,但是您的代码将需要处理 JDBC 驱动程序返回的记录集,这些记录集不是 CFML 查询对象。

关于coldfusion - 我可以在运行时指定动态数据源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30122717/

相关文章:

rest - ColdFusion 10 REST API : How to set status code 201 without RestSetResponse()

apache - ColdFusion 11 REST 返回 404

coldfusion-11 - 如何访问条形图中的柱形/条形总计?

mysql - ColdFusion cfdump 不显示对 Lucee 版本 5.2.1.9 的查询

struct - 如何循环查询数据并插入结构?

java - 如何构建 JAR 文件

coldfusion - CFCLIENT:文档示例不起作用;什么都做不了?

coldfusion - 定义自定义数据类型?

coldfusion - 如何在 coldfusion <cfscript> 中使用 <form> 标签

variables - Coldfusion 11 - 全局变量 - Application.cfc 或 Application.cfm