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

2022-09-04 02:55:38

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

现在已经走了那么远:

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”而不是我的表名。所以猜猜查询有问题。

谢谢!


答案 1

刚刚在FireFox的SQLite管理器插件中使用我正在使用的SQLite db进行了快速测试,并且您正在使用的查询确实返回了表名称。您是否正确创建了表,并且是否按照您的期望测试了存在?

要循环访问,请执行以下操作:

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

答案 2

试试这个代码

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

推荐