SQLite, как получить все имена таблиц в базе данных? - PullRequest
14 голосов
/ 15 сентября 2011

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

Сейчас дошло до этого:

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" вместо имен моей таблицы. Итак, угадайте, что с запросом что-то не так.

Спасибо!

Ответы [ 3 ]

11 голосов
/ 15 сентября 2011

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

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

    if (c.moveToFirst())
    {
        while ( !c.isAfterLast() ){
           dirArray.add( c.getString( c.getColumnIndex("name")) );
           c.moveToNext();
        }
    }
5 голосов
/ 15 сентября 2011

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

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);
   }
 }
0 голосов
/ 25 марта 2013

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

Cursor cursor = DB.getInstance(this).getAllTableNames();
if (cursor.moveToFirst()) {
    while (cursor.moveToNext()) {
        String tableName = cursor.getString(cursor.getColumnIndex("name"));
        Log.i(LOG_TAG, "..." + tableName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...