2011-09-15 30 views
14

¿Cuál crees que sería la forma correcta de obtener todos los nombres de tabla de una base de datos y agregarlos a una lista?SQLite, ¿cómo obtener todos los nombres de tablas en la base de datos?

En este momento llegó tan lejos:

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

Pero da salida a algunos "android_metadata" en lugar de mi nombre de la tabla de. Así que supongo que hay algo mal con la consulta.

Gracias!

Respuesta

11

Acabo de hacer una prueba rápida en el plugin SQLite Manager en FireFox con el DB SQLite con el que estoy trabajando y la consulta que está utilizando devuelve los nombres de la tabla. ¿Estás creando las tablas correctamente y has probado que existen a tus expectativas?

para recorrer, hacer algo como:

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

Sí, ahora parece que funciona, sólo salidas el primero como "android_metadata", ¿simplemente lo ignoro? – Roger

+2

Sí, pon algo para ignorar la primera fila ... incluso puedes poner c.moveToNext() justo antes del ciclo while() O BIEN comprobarlo explícitamente. – SBerg413

5

probar este código

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

Es posible utilizar éste también

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