2013-03-13 2 views
26

У меня попробовать этот кодКак получить все имена таблиц в базе данных android sqlite?

Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type = 'table'",null); 

c.moveToFirst(); 

while(!c.isAfterLast()){ 

Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show(); 

} 

но он выдает ошибку "android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):,while compiling: SELECT name FROM sqlite_master WHERE type='table'"

Как извлечь все имя таблицы? Помогите мне

Заранее спасибо ..

+2

Вы не должны знать имя таблиц в своей базе данных? – njzk2

+0

Я хочу создать таблицу динамически, которые не созданы в базе данных. Я хочу иметь существующее имя таблицы в моей базе данных. как показать таблицу в mysql – Sandeep

ответ

52

Проверено, испытано и функционирует. Попробуйте этот код:

Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

if (c.moveToFirst()) { 
    while (!c.isAfterLast()) { 
     Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show(); 
     c.moveToNext(); 
    } 
} 

Я предполагаю, что в какой-то момент вниз линии, вы будете захватывать список имен таблиц для отображения в возможно, ListView или что-то. Не просто показать тост.

Неиспользованный код. Только то, что было на высоте. Перед тестированием перед тем, как использовать его в производственном приложении. ;-)

В этом случае, обратите внимание на следующие изменения в код размещен выше:

ArrayList<String> arrTblNames = new ArrayList<String>(); 
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

    if (c.moveToFirst()) { 
     while (!c.isAfterLast()) { 
      arrTblNames.add(c.getString(c.getColumnIndex("name"))); 
      c.moveToNext(); 
     } 
    } 
+0

Спасибо Сиддхарту за его работы .. – Sandeep

+0

@ Сандип: Рад я мог помочь. :-) –

+4

Я не понимаю, как ваш запрос отличается от других? – njzk2

5

Попробуйте добавить схему перед таблицей

schema.sqlite_master

От SQL FAQ

Если вы работаете в sqlite3 командной строки вы можете ввести «.tables», чтобы получить список всех таблиц. Или вы можете ввести «.schema», чтобы увидеть полную схему базы данных, включая все таблицы и индексы. За каждой из этих команд может следовать шаблон LIKE, который будет ограничивать отображаемые таблицы.

В программе C/C++ (или скрипте с использованием привязок Tcl/Ruby/Perl/Python) вы можете получить доступ к именам таблиц и индексов, выполнив SELECT в специальной таблице с именем «SQLITE_MASTER». Каждая база данных SQLite имеет таблицу SQLITE_MASTER, которая определяет схему для базы данных. Таблица sqlite_master выглядит следующим образом:

CREATE TABLE sqlite_master ( тип TEXT, имя TEXT, tbl_name TEXT, корневой страницы INTEGER, SQL TEXT );

+0

Спасибо :(но я уже создал схему, но все еще не работает. Могли бы вы вставить код получения всего имени таблицы из базы данных sqlite android. – Sandeep

+0

Попробуйте указать, что сказал @Siddharth Lele. Он добавил условие, потому что вы не знаете, вы получите какой-либо результат. Если он не сработает, замените курсорный запрос: 'Cursor c = db.rawQuery (« SELECT name FROM your_schema.sqlite_master WHERE type = 'table' ", null);' – AlexBcn

+0

Спасибо, но у меня есть уже пробовал с помощью my_schema.sqlite_master, но это не сработало, и спасибо за ваш ценный ответ. – Sandeep

2

Попробуйте это:

SELECT name FROM sqlite_master WHERE type = "table"; 
+0

Я пробовал это. – Sandeep

+11

Это, кажется, всего лишь фрагмент кода в вопросе. В общем, начиная с «Попробуйте это «Предполагает, что ответчик сам не пробовал. –

4

Чтобы получить имя таблицы с список всех колонке этой таблицы

public void getDatabaseStructure(SQLiteDatabase db) { 

     Cursor c = db.rawQuery(
       "SELECT name FROM sqlite_master WHERE type='table'", null); 
     ArrayList<String[]> result = new ArrayList<String[]>(); 
     int i = 0; 
     result.add(c.getColumnNames()); 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      String[] temp = new String[c.getColumnCount()]; 
      for (i = 0; i < temp.length; i++) { 
       temp[i] = c.getString(i); 
       System.out.println("TABLE - "+temp[i]); 


       Cursor c1 = db.rawQuery(
         "SELECT * FROM "+temp[i], null); 
       c1.moveToFirst(); 
       String[] COLUMNS = c1.getColumnNames(); 
       for(int j=0;j<COLUMNS.length;j++){ 
        c1.move(j); 
        System.out.println(" COLUMN - "+COLUMNS[j]); 
       } 
      } 
      result.add(temp); 
     } 
8

Измените свою строку sql на этот:

"SELECT name FROM sqlite_master WHERE type='table' AND name!='android_metadata' order by name"

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