SQLite选择所有表DESC

时间:2013-06-13 02:00:13

标签: android sqlite

我找到了解决方案来获取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;
}

2 个答案:

答案 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;
}