如何循环数据库的表?

Sul*_*han 4 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> 
Run Code Online (Sandbox Code Playgroud)

Lei*_*igh 7

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

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

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

也就是说,我发现使用元数据INFORMATION_SCHEMA视图更容易.您可以像任何表一样查询它们.然后像往常一样输出静态列名.

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

    <cfoutput query="yourQueryName">
         #TABLE_NAME# <br>
    </cfoutput>
Run Code Online (Sandbox Code Playgroud)

  • 查询[`INFORMATION_SCHEMA.COLUMNS`](http://dev.mysql.com/doc/refman/5.0/en/columns-table.html)视图.要获取单个表的列,只需过滤"TABLE_NAME"而不是模式.即`...... WHERE TABLE_NAME ='某些表' (2认同)
  • 实际上,我把它拿回来.你应该过滤*`*table_name`和`table_schema`.以防多个数据库中存在相同的`table_name`. (2认同)