在Android应用程序中从数据库获取表名列表
我试图从SQLite数据库中获取表名列表。我设法做到了这一点,但我也得到了临时表名,如“android\u metadata”和“sqlite\u sequence”。我想把这两个排除在外 然而,我不能让它正常工作在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
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:为什么不让用户制作一张桌子呢?