我正在尝试使用以下代码循环遍历数据库的表,并收到错误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>
答案 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>