我找到了解决方案来获取SQLite中的所有表。 How to list the tables in an SQLite database file that was opened with ATTACH? 但是,当我改变时:
SELECT name FROM sqlite_master WHERE type='table';
进入:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC;
输出完全是奇怪的。 第一个查询给了我: tbl201306 - > 2013年6月至今仅有1张表。 第二个查询给了我: android_metadata - >名称未更改,但会返回此名称。
我希望这些表格按降序排列,因为将来最新的表格会排在最前面。
我的完整代码:
public ArrayList<String> getDBTables() {
ArrayList<String> toReturn = new ArrayList<String>();
try {
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC", null);
c.moveToFirst();
while (c.moveToNext()) {
toReturn.add(c.getString(c.getColumnIndex("name")));
}
c.close();
}
catch(SQLiteException e) {
e.printStackTrace();
}
return toReturn;
}
答案 0 :(得分:1)
您的代码会跳过第一条返回的记录。
你可以
moveToFirst()
的调用,并将循环更改为do { ... } while ();
循环,或moveToFirst()
的调用。答案 1 :(得分:0)
这是我使用的最终解决方案:
public ArrayList<String> getDBTables() {
ArrayList<String> toReturn = new ArrayList<String>();
try {
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'tbl%' ORDER BY name DESC", null);
while(c.moveToNext()) {
toReturn.add(c.getString(c.getColumnIndex("name")));
}
c.close();
}
catch(SQLiteException e) {
e.printStackTrace();
}
return toReturn;
}