Подтвердить что ты не робот

Как получить все имена таблиц в базе данных 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'"

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

Спасибо заранее.

4b9b3361

Ответ 1

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

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();
        }
    }

Ответ 2

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

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

Ответ 3

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

    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);
            }
}

Ответ 4

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

schema.sqlite_master

Из Часто задаваемые вопросы по SQL

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

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

CREATE TABLE sqlite_master (   тип ТЕКСТ,   имя TEXT,   tbl_name ТЕКСТ,   rootpage INTEGER,   sql TEXT );

Ответ 5

Попробуйте следующее:

SELECT name FROM sqlite_master WHERE type = "table";