我的应用程序托管在为许多客户提供服务的中央服务器上。它现在需要与驻留在客户所在地现场的数据库服务器交叉引用信息。
我想将客户服务器的详细信息与其帐户详细信息(例如 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/