从SQL数据库返回单个列值

时间:2015-01-10 15:36:38

标签: java android mysql sql sqlite

我需要从我的数据库中获取最新条目,但不是自动增量。 这个函数在我的databasehandler中:

public int getLatestRouteNumber()
{
    int number = 0;
    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT MAX("+ KEY_ROUTENUMBER + ") FROM " + TABLE_LOCATIONS;
    Cursor c = db.rawQuery(query, null);
    if (c.moveToFirst() && c != null) {
        number = c.getInt(3);
    }
    return number;
}

它在" number = c.getInt(3)的行处进行分析。 我的数据库中的第三列存在并且其中包含数据。

我遇到的错误是"无法从CursorWindow读取第0行第3列。在从中访问数据之前,请确保正确初始化Cursor。"我只需要整个数据库中的一个值,甚至整行都不需要。

6 个答案:

答案 0 :(得分:1)

光标中只有一列,但试图获取第3列的值... Tat是错误

将其更改为getInt(0);

答案 1 :(得分:0)

返回的结果集与您的案例中的表列无关。你应该使用

number = c.getInt(0);

答案 2 :(得分:0)

您的结果集只包含一列和一行,基本上是一个标量值,它与您的表中有多少列无关,这里您应该考虑的是从查询中获得的值在您的情况下只有一个价值。使用

getInt(0)

答案 3 :(得分:0)

你试过这样的事吗:

String query = "SELECT MAX("+ KEY_ROUTENUMBER + ") as my_max FROM " + TABLE_LOCATIONS;

并且:

columnIndex = c.getColumnIndexOrThrow("my_max");
number = c.getInt(columnIndex );

这比使用索引更好,如果原始查询发生更改,索引可能会出错。

答案 4 :(得分:0)

getInt(3)返回查询返回的第3列的值。您的查询只有1列。

将getInt(3)更改为getInt(0)

答案 5 :(得分:0)

“c.getInt(3);”没有从表中的列中获取值,它从光标中的列中获取它。

您只在光标中选择了一列。

所以我认为它应该是“c.getInt(1);”