如何获取Android sqlite数据库中的所有表名?

2022-09-01 01:49:53

我已经尝试过这个代码

Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type = 'table'",null);
c.moveToFirst();
while(!c.isAfterLast()){
    Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), 
        Toast.LENGTH_LONG).show();
}

但它抛出了错误:

"android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):, while 
compiling: SELECT name FROM sqlite_master WHERE type='table'"

如何获取所有表名?


答案 1

已检查、测试和运行。试试这个代码:

Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);

if (c.moveToFirst()) {
    while ( !c.isAfterLast() ) {
        Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show();
        c.moveToNext();
    }
}

我假设,在这条线上的某个时候,你会抓取一个表名列表,以显示在一个或什么地方。不只是举杯。ListView

未经测试的代码。只是出现在我脑海中的头等大事。在生产应用程序中使用它之前,请先进行测试。

在这种情况下,请考虑对上面发布的代码进行以下更改:

ArrayList<String> arrTblNames = new ArrayList<String>();
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);

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

答案 2

将 sql 字符串更改为以下字符串:

"SELECT name FROM sqlite_master WHERE type='table' AND name!='android_metadata' order by name"


推荐