如何循环数据库的表?

时间:2014-02-11 20:05:24

标签: coldfusion coldfusion-9

我正在尝试使用以下代码循环遍历数据库的表,并收到错误java.lang.UnsupportedOperationException。我甚至试过用cfloop query and other attributes得到的错误复杂值无法转换为简单值。任何人都可以告诉我如何循环这个查询?感谢。

<cfquery name="q" datasource="datasource">
    SHOW TABLES FROM datasource
</cfquery>
<cfloop collection ="#q#" item="i">
   #q[i]#
</cfloop> 

3 个答案:

答案 0 :(得分:7)

您收到该错误是因为cfloop collection需要结构,而不是查询对象。因此“UnsupportedOperation ...”错误。

相反,您应该使用查询循环。生成的列名称是动态的,基于您提供的数据库名称。您可以硬编码或动态访问它:

   <cfset colNames = listToArray(q.columnList)>
   <cfoutput query="q">
      <cfloop array="#colName#" index="col">
            #q[col][currentRow]#
      </cfloop>
      <br>
   </cfoutput>

那就是说,我发现使用metadata INFORMATION_SCHEMA views更容易。您可以像任何表一样查询它们。然后像往常一样输出静态列名。

    <cfquery name="yourQueryName" ...>
       SELECT  TABLE_NAME
       FROM    INFORMATION_SCHEMA.TABLES
       WHERE   TABLE_SCHEMA = 'YourDatabaseName'
    </cfquery>

    <cfoutput query="yourQueryName">
         #TABLE_NAME# <br>
    </cfoutput>

答案 1 :(得分:1)

你试过CFDBINFO吗?它支持一种“tabes”,并且应该返回每个表的表名,类型和备注的查询。

答案 2 :(得分:0)

怎么样

<cfoutput query="q">
#tables#
<cfoutput>