How to get all table names in android sqlite database?

后端 未结 5 1581
逝去的感伤
逝去的感伤 2020-12-05 06:37

I have tried this code

Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type = \'table\'",null);
c.moveToFirst();
while(!c.isAfterLast()){         


        
相关标签:
5条回答
  • 2020-12-05 06:57

    To get table name with list of all column of that table

        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);
                }
    }
    
    0 讨论(0)
  • 2020-12-05 07:00

    Change your sql string to this one:

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

    0 讨论(0)
  • 2020-12-05 07:02

    Try adding the schema before the table

    schema.sqlite_master

    From SQL FAQ

    If you are running the sqlite3 command-line access program you can type ".tables" to get a list of all tables. Or you can type ".schema" to see the complete database schema including all tables and indices. Either of these commands can be followed by a LIKE pattern that will restrict the tables that are displayed.

    From within a C/C++ program (or a script using Tcl/Ruby/Perl/Python bindings) you can get access to table and index names by doing a SELECT on a special table named "SQLITE_MASTER". Every SQLite database has an SQLITE_MASTER table that defines the schema for the database. The SQLITE_MASTER table looks like this:

    CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT );

    0 讨论(0)
  • 2020-12-05 07:05

    Try this:

    SELECT name FROM sqlite_master WHERE type = "table";
    
    0 讨论(0)
  • 2020-12-05 07:17

    Checked, tested and functioning. Try this code:

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

    I am assuming, at some point down the line, you will to grab a list of the table names to display in perhaps a ListView or something. Not just show a Toast.

    Untested code. Just what came at the top of my mind. Do test before using it in a production app. ;-)

    In that event, consider the following changes to the code posted above:

    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();
            }
        }
    
    0 讨论(0)
提交回复
热议问题