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

我试过这段代码

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'"

如何获取所有表名? 帮我

提前致谢..

  • 从Android的sqlite数据库检索大blob
  • 使用ContentValues和update-method更新sql数据库
  • 从sqlite数据库Android获取最后插入的值
  • SQLite中使用的数据types
  • SQLiteConstraintException:错误代码19:约束失败
  • Android:应用程序的数据库安全性如何?
  • Android的SQLite - select字段为空或空的logging
  • Android - 何时调用db.setTransactionSuccessful()?
  • 检查,测试和运作。 试试这段代码:

     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 arrTblNames = new ArrayList(); 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(); } } 

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

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

    尝试在表之前添加架构

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

    获取包含该表的所有列列表的 表名

     public void getDatabaseStructure(SQLiteDatabase db) { Cursor c = db.rawQuery( "SELECT name FROM sqlite_master WHERE type='table'", null); ArrayList result = new ArrayList(); 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 

    尝试这个:

     SELECT name FROM sqlite_master WHERE type = "table";