SQLite, как получить все имена таблиц в базе данных?

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

Прямо сейчас получилось так далеко:

final ArrayList<String> dirArray = new ArrayList<String>(); SqlHelper sqlHelper = new SqlHelper(this, "TK.db", null, 1); SQLiteDatabase DB = sqlHelper.getWritableDatabase(); Cursor c = DB.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); c.moveToFirst(); while (c.isAfterLast() == false) { dirArray.add("n" + c.getColumnIndex("name")); c.moveToNext(); } c.close(); 

Но он выводит некоторые «android_metadata» вместо имени моей таблицы. Так что угадайте, что что-то не так с запросом.

Благодаря!

Solutions Collecting From Web of "SQLite, как получить все имена таблиц в базе данных?"

Просто сделал быстрый тест в плагине SQLite Manager в FireFox с SQLite db, с которым я работаю, и запрос, который вы используете, возвращает имена таблиц. Правильно ли вы создаете таблицы и проверили ли вы свои ожидания?

Чтобы выполнить итерацию, сделайте что-то вроде:

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

Попробуйте этот код

 final ArrayList<String> dirArray = new ArrayList<String>(); SqlHelper sqlHelper = new SqlHelper(this, "TK.db", null, 1); SQLiteDatabase DB = sqlHelper.getWritableDatabase(); Cursor c = DB.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); while(c.moveToNext()){ String s = c.getString(0); if(s.equals("android_metadata")) { //System.out.println("Get Metadata"); continue; } else { dirArray.add(s); } } в final ArrayList<String> dirArray = new ArrayList<String>(); SqlHelper sqlHelper = new SqlHelper(this, "TK.db", null, 1); SQLiteDatabase DB = sqlHelper.getWritableDatabase(); Cursor c = DB.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); while(c.moveToNext()){ String s = c.getString(0); if(s.equals("android_metadata")) { //System.out.println("Get Metadata"); continue; } else { dirArray.add(s); } } 

Вы также можете использовать этот

 Cursor cursor = DB.getInstance(this).getAllTableNames(); if (cursor.moveToFirst()) { while (cursor.moveToNext()) { String tableName = cursor.getString(cursor.getColumnIndex("name")); Log.i(LOG_TAG, "..." + tableName); } }