4

希望有人会帮助我,因为这让我摸不着头脑。

正如大多数人已经知道的 2 种使用冷融合检索 mysql 查询列名的简单方法:

1. <cfset arrColumns = ListToArray(thequery.columnList) />
2. <cfset arrColumns = getMetaData(thequery) />

两者都将成功创建列名数组(1 按字母数字顺序,2 按从数据库中检索的顺序)。

例如:

<cfquery name="thequery" datasource="thedatasource">
    SELECT a.title, b.name 
    FROM tablea a
    JOIN tableb b ON b.a_id = a.id
</cfquery>
<cfset arrColumns = ListToArray(thequery.columnList) />

以上将成功输出具有值的数组:

arrColumns[1]: "name" 
arrColumns[2]: "title"

我需要它做的是输出:

arrColumns[1]: "tableb.name" 
arrColumns[2]: "tablea.title"

...基本上,包括数据库表名和列名。这让我摸不着头脑,任何帮助都将不胜感激。我已经搜索了谷歌和 stackoverflow 并没有找到答案。

谢谢

4

2 回答 2

1

首先,JDBC 不能可靠地公开您需要的表信息,并且getTableName()ColdFusion 实现中的相关方法 ( ) 只会引发异常。所以简短的版本是你不能做你想做的事,你想做的事。

也就是说,我认为无论如何你都应该以不同的方式处理事情。拥有一个包含数据和模式信息的数据结构的想法似乎......对我来说是错误的。

于 2013-10-08T10:28:08.050 回答
0

我建议这种方法。将您的查询放入一个函数中,该函数接受有关包含表名的强制参数。如果您必须提供它们,请将它们包含在列别名中,并用双引号括起来。像这样的东西:

select table1.field1 "table1.field1"
, table1.field2 "table1.field2"
etc
于 2013-10-08T11:55:07.133 回答