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

Rog*_*ger 14 java database sqlite android

您认为从数据库获取所有表名并将其添加到列表的正确方法是什么?

现在就到了这么远:

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();
Run Code Online (Sandbox Code Playgroud)

但它输出一些"android_metadata"而不是我的表名.所以猜测查询有问题.

谢谢!

SBe*_*413 11

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

要迭代,执行以下操作:

    if (c.moveToFirst())
    {
        while ( !c.isAfterLast() ){
           dirArray.add( c.getString( c.getColumnIndex("name")) );
           c.moveToNext();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 是的,放入一些内容忽略第一行..你甚至可以在while()循环之前放置一个c.moveToNext()或显式检查它. (2认同)

Bal*_*i.K 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);
   }
 }
Run Code Online (Sandbox Code Playgroud)