获得表名的名单从Android应用程序数据库(Getting list of table names

2019-10-28 15:46发布

我试图从SQLite数据库获得的表名的列表。 我设法让这一点,但我也得到这样的“android_metadata”和“sqlite_sequence”临时表名。 我要排除这些2。

但是,我不能让它的工作权利。

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

        }
    }

Answer 1:

假设当前行是android_metadata 。 表达name NOT LIKE 'android_metadata'将是错误的,但表达name NOT LIKE 'sqlite_sequence'为真。 所以WHERE子句减少到true AND (true OR false)这是真的。

您需要更换ORAND

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

如果你真的想使用OR ,你必须申请德·摩根的法律和否定整个条件:

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


文章来源: Getting list of table names from database in Android application