【问题标题】:Android SQLitedatabase [duplicate]Android SQLite数据库[重复]
【发布时间】:2015-06-02 00:21:42
【问题描述】:

为什么我们必须移动到下面代码中的第一项?我认为游标只会包含一行,因为 rowId 是主键

    // Fetch single reminder
@SuppressLint("NewApi")
public Cursor fetchReminder(long rowId) throws SQLException {
    Cursor myCursor = db.query(true, DATABASE_TABLE, new String[] {
            KEY_ROW_ID, KEY_TITLE, KEY_BODY, KEY_DATE_TIME }, KEY_ROW_ID
            + "=" + rowId, null, null, null, null, null, null);
    if (myCursor != null) {
        myCursor.moveToFirst();
    }
    return myCursor;
}

【问题讨论】:

  • 请修正你的标题。
  • 看看this

标签: android sqlite cursor


【解决方案1】:

只有一个 Cursor 类。它不知道它有多少行。 Query 不会为查询单行或多行创建不同类型的游标。你应该打电话:

Curcor c = db.query(...);
try {
    if (c.moveToFirst()) { // we only have 1 result. 
                           //Otherwise we would iterate by
                           //(while(c.moveToNext()){...}
        String value = c.getString(0);
    }
} finally {
    c.close();
}

【讨论】:

  • 好的..但是如果我们知道结果只会包含一行..为什么我们要说 c.moveToFirst ?
  • 因为这样您可以检查是否至少有一行像预期的那样,并且在读取值时不会得到 npe。而且我认为(不是 100% 确定)我们在光标中的默认索引是 -1,所以我们必须转到第一个。
猜你喜欢
  • 2012-12-04
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2016-10-29
  • 2017-01-22
  • 2012-01-02
相关资源
最近更新 更多