Android SQLite选择所有表描述

Android SQLite选择所有表描述,android,sqlite,Android,Sqlite,我找到了在SQLite中获取所有表的解决方案。 但是,当我改变时: SELECT name FROM sqlite_master WHERE type='table'; 进入: SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC; 输出完全奇怪。 第一个问题给了我: tbl201306-->到目前为止,2013年6月只有一个表。 第二个问题给了我: android_metadata-->名称未更改,但返回此

我找到了在SQLite中获取所有表的解决方案。 但是,当我改变时:

SELECT name FROM sqlite_master WHERE type='table';
进入:

SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC;
输出完全奇怪。 第一个问题给了我: tbl201306-->到目前为止,2013年6月只有一个表。 第二个问题给了我: 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;
}
public ArrayList getDBTables(){
ArrayList toReturn=新的ArrayList();
试一试{
游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'按名称排序DESC”,null);
c、 moveToFirst();
while(c.moveToNext()){
添加(c.getString(c.getColumnIndex(“name”));
}
c、 close();
}
catch(sqlitee异常){
e、 printStackTrace();
}
回归回归;
}

您的代码跳过第一条返回的记录

你也可以

  • 保持对
    moveToFirst()
    的调用,并将循环更改为
    do{…}while()循环,或
  • 只需删除对
    moveToFirst()
    的调用

您的代码跳过第一条返回的记录

你也可以

  • 保持对
    moveToFirst()
    的调用,并将循环更改为
    do{…}while()循环,或
  • 只需删除对
    moveToFirst()
    的调用

    • 这是我使用的最终解决方案:

      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;
      }
      
      public ArrayList getDBTables(){
      ArrayList toReturn=新的ArrayList();
      试一试{
      游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'和类似'tbl%'的名称按名称DESC排序”,null);
      while(c.moveToNext()){
      添加(c.getString(c.getColumnIndex(“name”));
      }
      c、 close();
      }
      catch(sqlitee异常){
      e、 printStackTrace();
      }
      回归回归;
      }
      
      这是我使用的最终解决方案:

      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;
      }
      
      public ArrayList getDBTables(){
      ArrayList toReturn=新的ArrayList();
      试一试{
      游标c=db.rawQuery(“从sqlite_master中选择名称,其中type='table'和类似'tbl%'的名称按名称DESC排序”,null);
      while(c.moveToNext()){
      添加(c.getString(c.getColumnIndex(“name”));
      }
      c、 close();
      }
      catch(sqlitee异常){
      e、 printStackTrace();
      }
      回归回归;
      }
      
      哇,这没什么意义。这看起来像是有效的代码。你的sql行在我的数据库上运行得很好。当我遇到这种奇怪的事情时,我会尝试“现实检查”。如果你换回第一行,它还能用吗?你的数据库可能会搞砸。其他“不顾一切”的措施包括删除当前字符串,重新键入它,并对项目进行完全干净的重建,包括首先将其从设备中删除。您的问题是什么?查询返回两条记录。名称按降序排列。你期待什么?数据库中有更多的表吗?当我使用第一个SQL时,我会再次获得原始名称(tbl201306)。我不知道为什么。我运行它来填充微调器。稍后我可以在ArrayList中反转顺序,但效率不高。现在在我的数据库中只有一条记录。哇,这没有多大意义。这看起来像是有效的代码。你的sql行在我的数据库上运行得很好。当我遇到这种奇怪的事情时,我会尝试“现实检查”。如果你换回第一行,它还能用吗?你的数据库可能会搞砸。其他“不顾一切”的措施包括删除当前字符串,重新键入它,并对项目进行完全干净的重建,包括首先将其从设备中删除。您的问题是什么?查询返回两条记录。名称按降序排列。你期待什么?数据库中有更多的表吗?当我使用第一个SQL时,我会再次获得原始名称(tbl201306)。我不知道为什么。我运行它来填充微调器。稍后我可以在ArrayList中反转顺序,但效率不高。现在在我的数据库中只有一条记录。顺便说一句,你是绝对正确的!显然,android_元数据表是自动生成的。所以有两张桌子,我跳过了第一张桌子。你说得绝对正确!显然,android_元数据表是自动生成的。有两张桌子,我跳过了第一张桌子。