Как получить все имена таблиц в базе данных 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'"
Как получить все имя таблицы? Помогите мне
Спасибо заранее.
Ответы
Ответ 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";