【问题标题】:How to go through every record in SQLite db?如何遍历 SQLite db 中的每条记录?
【发布时间】:2010-06-08 07:44:00
【问题描述】:

我认为这有点简单,但我仍然是 android 编程的新手,所以请耐心等待。我想知道如何获取数据库中特定表中的记录(行)数。我需要这个,所以我可以创建一个循环来遍历每条记录,并将每一条记录添加到特定的数组中,稍后再显示。这是来源:

db.openDataBase();            // open connection with db

Cursor c = db.getTitle(5);    // loop here through db, right now I'm fetching only one record

startManagingCursor(c);

//adding areas to the list here

Area o1 = new Area();

o1.setOrderName(c.getString(1) + c.getString(2));  

m_areas.add(o1);

db.close();

请问有人可以帮我吗?提前谢谢!

【问题讨论】:

  • 我可以建议您将db.openDataBase(); 和除db.close() 之外的其余代码放在try-block 中,并将close 调用放在finally 块中。即使代码中抛出异常,它也会确保您尝试关闭数据库。

标签: android sqlite


【解决方案1】:
SELECT COUNT(*) FROM tablename

【讨论】:

    【解决方案2】:

    要获取游标中的行数,请使用getCount

    要获取表中的总行数,请使用reinierposts 解决方案,或执行选择以选择表中的所有行并从游标中获取计数。我猜他的解决方案会更快,除非你真的需要表中的所有行。

    这样的查询是:

    SELECT * FROM footable;
    

    【讨论】:

      【解决方案3】:

      您实际上不需要先计算有多少;相反,创建一个 db.getTitles() 函数,该函数返回所有行并返回一个 Cursor,然后遍历 Cursor。现在您可能有一个类似于SELECT ColumnA, ColumnB FROM Titles WHERE id = 5 的查询;只需复制函数,删除参数并取消 WHERE 子句,使其看起来像 SELECT ColumnA, ColumnB FROM Titles

      那么您的代码将如下所示:

      db.openDataBase(); // open connection with db
      Cursor c = db.getTitles();
      startManagingCursor(c);
      
      //adding areas to the list here
      if (c != null && c.moveToFirst()) {
          do {
              Area o1 = new Area();
              o1.setOrderName(c.getString(1) + c.getString(2));
              m_areas.add(o1);
          } while (c.next());
      }
      
      db.close();
      

      我们检查函数是否返回了一个游标,然后移动到游标的开头并开始循环,每次都转到下一个项目。有关 Cursor 接口的更多信息,请参阅 API here,或者要更好地了解有关数据库访问和相关设计实践的更多信息,我建议通过 Notepad tutorial

      【讨论】:

        猜你喜欢
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多