如何在android sqlite数据库中获取所有表名?

San*_*eep 36 java sqlite android

我试过这段代码

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

}
Run Code Online (Sandbox Code Playgroud)

但它会引发错误 "android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):,while compiling: SELECT name FROM sqlite_master WHERE type='table'"

如何获取所有表名?帮我

提前致谢..

Sid*_*ele 69

检查,测试和运作.试试这段代码:

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

我假设,在某些时候,你将获取一个表名列表,以显示在一个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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 我不明白你的查询有何不同? (4认同)
  • Hello Folks @siddharthLele查询也适用于iOS Sqlite,如FMResultSet*s = [数据库executeQuery:@"SELECT name FROM sqlite_master WHERE type ='table'"]; while([s next]){NSLog(@"%@",[s stringForColumn:@"name"]); 并按字符串名称迭代.快乐的编码 (2认同)

Daw*_*nYu 10

将您的sql字符串更改为此字符串:

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


Sid*_*mit 7

为了让表名所有的名单之列该表

    public void getDatabaseStructure(SQLiteDatabase db) {

            Cursor c = db.rawQuery(
                    "SELECT name FROM sqlite_master WHERE type='table'", null);
            ArrayList<String[]> result = new ArrayList<String[]>();
            int i = 0;
            result.add(c.getColumnNames());
            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
                String[] temp = new String[c.getColumnCount()];
                for (i = 0; i < temp.length; i++) {
                    temp[i] = c.getString(i);
                    System.out.println("TABLE - "+temp[i]);


                    Cursor c1 = db.rawQuery(
                            "SELECT * FROM "+temp[i], null);
                    c1.moveToFirst();
                    String[] COLUMNS = c1.getColumnNames();
                    for(int j=0;j<COLUMNS.length;j++){
                        c1.move(j);
                        System.out.println("    COLUMN - "+COLUMNS[j]);
                    }
                }
                result.add(temp);
            }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*Bcn 5

尝试在表之前添加架构

schema.sqlite_master

SQL FAQ

如果您正在运行sqlite3命令行访问程序,则可以键入".tables"以获取所有表的列表.或者,您可以键入".schema"以查看包括所有表和索引的完整数据库模式.这些命令中的任何一个都可以跟随LIKE模式,该模式将限制显示的表.

在C/C++程序(或使用Tcl/Ruby/Perl/Python绑定的脚本)中,您可以通过在名为"SQLITE_MASTER"的特殊表上执行SELECT来访问表和索引名称.每个SQLite数据库都有一个SQLITE_MASTER表,用于定义数据库的模式.SQLITE_MASTER表如下所示:

CREATE TABLE sqlite_master(输入TEXT,输入TEXT,tbl_name TEXT,rootpage INTEGER,sql TEXT);