我的应用程序托管在为许多客户提供服务的中央服务器上。现在,它需要与位于客户所在地的数据库服务器交叉引用信息。
我想存储客户服务器的详细信息以及他们的帐户详细信息(例如dbname,host,port等)。
但是,根据谁登录到应用程序,我需要将其数据连接详细信息提供给<cfquery>
函数以执行查找。像这样:
<cfquery name="rsOrders" datasource="{dynamically provided connection string}">
SELECT *
FROM
CompanysDBTable
</cfquery>
我知道有一个管理员API以编程方式创建数据源,但是使用它会意味着我的系统中会有额外的过程,如果客户要更新数据源详细信息会怎样?
那么有没有办法像上面那样在飞行中做到这一点?也就是说,在<cfquery>
标记内提供数据连接字符串。
或者有更好的方法完全这样做吗?
答案 0 :(得分:6)
您可以在ColdFusion 11中在运行时创建特定于应用程序的数据源。请参阅文档:&#34; Application-specific datasources in Application.cfc&#34;。我也在我的博客中讨论过这个问题:&#34; Defining datasources in Application.cfc&#34;。
一个例子是:
// 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查询对象。 / p>
答案 1 :(得分:4)
获取连接凭据后,在ColdFusion中设置适当命名的数据源。将此数据源的名称放在具有您提到的其他帐户详细信息的数据库中。对于未向您发送凭据的客户,请使用默认数据源。
运行应用程序时,请获取数据源以及其他客户信息,并将其用于cfquery标记。