vol*_*one 4 coldfusion coldfusion-11
我的应用程序托管在一个服务于许多客户的中央服务器上.现在,它需要与驻留在客户所在位置的数据库服务器交叉引用信息.
我想存储客户服务器的详细信息以及他们的帐户详细信息(例如dbname,host,port等).
但是,根据谁登录到应用程序,我需要将其数据连接详细信息提供给<cfquery>函数以执行查找.像这样的东西:
<cfquery name="rsOrders" datasource="{dynamically provided connection string}">
SELECT *
FROM
CompanysDBTable
</cfquery>
Run Code Online (Sandbox Code Playgroud)
我知道有一个管理员API以编程方式创建数据源,但是使用它会意味着我的系统中有一个额外的过程,如果客户需要更新数据源详细信息会发生什么?
那么有没有办法像上面那样在飞行中做到这一点?也就是说,在<cfquery>标签内提供数据连接字符串.
或者有更好的方法完成这项工作吗?
您可以在ColdFusion 11中的运行时创建特定于应用程序的数据源.请参阅文档:" Application.cfc中的特定于应用程序的数据源 ".我还在我的博客中讨论了这个问题:" 在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";
}
Run Code Online (Sandbox Code Playgroud)
这是ColdFusion最接近的.
如果你直接使用JDBC,你可以在创建连接时给出连接字符串,但是你的代码需要与JDBC驱动程序返回的记录集竞争,这不是CFML查询对象.