2014-02-11 4 views
3

Я пытаюсь перевернуть таблицы базы данных, используя следующий код, получив ошибку 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

Какие СУБД вы используете? MySQL? Вы пытались просто сбросить запрос? Он что-то возвращает? –

+0

@SeanCoyne - я использую MySQL, я сбросил его, он отображает все имена таблиц ... –

ответ

5

Вы получаете эту ошибку, потому что 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> 
+0

Спасибо, Ли ... это действительно удивительный ответ. можете ли вы рассказать мне, как мы можем получить имена столбцов для всех таблиц? –

+2

Вместо этого запросите представление ['INFORMATION_SCHEMA.COLUMNS'] (http://dev.mysql.com/doc/refman/5.0/en/columns-table.html). Чтобы получить столбцы для одной таблицы, просто выберите «TABLE_NAME» вместо схемы. т.е. '... WHERE TABLE_NAME = 'Some Table'' – Leigh

+2

Собственно, я беру это обратно. Вы должны фильтровать * оба * 'table_name' и' table_schema'. На всякий случай одно и то же 'table_name' существует в нескольких базах данных. – Leigh

0

Как насчет

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

таблицы находятся в столбце tables_in_database .... его не работает. когда я сбрасываю его, я не нашел ни одного имени столбца, кроме tables_in_nameofdb. –

1

вы пробовали CFDBINFO? Он поддерживает тип «tabes» и должен возвращать вам запрос имени таблицы, типа и примечаний для каждой таблицы.

Смежные вопросы