SQLite,如何获取数据库中的所有表名?

时间:2011-09-15 12:38:32

标签: java android database 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”而不是我的表名。所以猜测查询有问题。

谢谢!

3 个答案:

答案 0 :(得分:11)

刚刚使用我正在使用的SQLite数据库在FireFox的SQLite Manager插件中进行了快速测试,并且您正在使用的查询确实返回了表名。您是否正确创建了表格并且是否根据您的期望测试了存在?

要迭代,请执行以下操作:

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

答案 1 :(得分:5)

试试这段代码

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

答案 2 :(得分: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);
    }
}