2011-09-15 14 views
14

データベースからすべてのテーブル名を取得してリストに追加する正しい方法は何でしょうか?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」を出力:

は今のところそこまでです。クエリーに何か問題があると思われます。

ありがとうございます!

答えて

11

FireFoxのSQLite Managerプラグインで、使用しているSQLiteデータベースを使用して簡単にテストしましたが、使用しているクエリはテーブル名を返します。あなたはテーブルを正しく作成していますか、存在をあなたの期待に沿ってテストしましたか?以下のようなものか、を反復処理する

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

はい、今出力のみ、動作しているようです最初の "android_metadata"として、私はそれを無視するのですか? – Roger

+2

ええ、最初の行を無視するために何かを入れてください..あなたは明示的にそれをチェックするwhileループループの前にc.moveToNext()を置くことさえできます。 – SBerg413

5

あなたはこの1つを使用することができる

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

このコードを試してみてくださいも

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