在Android应用程序中从数据库获取表名列表

在Android应用程序中从数据库获取表名列表,android,sqlite,tablename,Android,Sqlite,Tablename,我试图从SQLite数据库中获取表名列表。我设法做到了这一点,但我也得到了临时表名,如“android\u metadata”和“sqlite\u sequence”。我想把这两个排除在外 然而,我不能让它正常工作 SQLiteDatabase database = getBaseContext().openOrCreateDatabase("vocabularyDatabase", MODE_PRIVATE, null); Cursor c = database.rawQuery

我试图从SQLite数据库中获取表名列表。我设法做到了这一点,但我也得到了临时表名,如“android\u metadata”和“sqlite\u sequence”。我想把这两个排除在外

然而,我不能让它正常工作

SQLiteDatabase database = 
getBaseContext().openOrCreateDatabase("vocabularyDatabase", 
MODE_PRIVATE, null);

    Cursor c = database.rawQuery(  "SELECT name FROM sqlite_master 
      WHERE (type = 'table') AND (name NOT LIKE 'sqlite_sequence' OR 
      name NOT LIKE 'android_metadata') ", 
      null);

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

        }
    }

假设当前行用于
android\u元数据
。表达式
名称不象'android\u metadata'
将为false,但表达式
名称不象'sqlite\u sequence'
将为true。因此WHERE子句减少为
true和(true或false)
,这是true

您需要将
替换为

WHERE type = 'table'
  AND (name NOT LIKE 'sqlite_sequence' AND
       name NOT LIKE 'android_metadata')
如果确实要使用
,则必须应用并否定整个条件:

WHERE type = 'table'
  AND NOT (name LIKE 'sqlite_sequence' OR
           name LIKE 'android_metadata')
或者,只需在中与列表一起使用:

WHERE type = 'table'
  AND name NOT IN ('sqlite_sequence', 'android_metadata')

这很奇怪。你为什么不知道数据库的表呢?嗯,我知道这些表,但我的想法是,应用程序的用户已经在数据库中创建了几个存储为表的列表,并且应该能够看到所有的列表(表),以便能够选择其中一个。因此,这段代码只是为了测试代码。这就是我的想法——在运行程序时,永远不应该创建表。DB模式应该是固定的,只添加数据,而不是表。Mike T的
从sqlite_master中选择名称(不是(名称='android_metadata'或类似'%sqlite_sequence%')的名称)和类型='table'
如何:很遗憾,没有工作。对于juergen d:为什么不让用户制作一张桌子呢?