Android sqlite - 空表上的光标计数不为 0

标签 android sqlite cursor

我在一个更大的项目中有以下代码:

final class DBlifetimeStatisticsHandler{ //implements DBvalueHandler<Cyclist, Double>{

private  final String TAG = getClass().getName();
private static final boolean debug = true;

private final DBminMaxAvgHandler dbMinMaxAvgHandler = new DBminMaxAvgHandler();

// table name
private static final String TABLE_LIFETIME_STATISTICS = "lifetime_statistics";

// column names
private static final String KEY_LIFETIME_STATISTICS_ID = "lifetime_statistics_id";
private static final String KEY_MIN_MAX_AVG = "min_max_avg";

// table create statement
private static final String CREATE_TABLE = "CREATE TABLE "
        + TABLE_LIFETIME_STATISTICS + "(" 
        + KEY_LIFETIME_STATISTICS_ID + " LONG PRIMARY KEY NOT NULL," 
        + KEY_MIN_MAX_AVG   + " LONG"
        + ")";

public void onCreateTable(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE);
}

public void onUpgrade(SQLiteDatabase db) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIFETIME_STATISTICS);
    onCreateTable(db);
}

public long addValue(SQLiteDatabase db, Statistics Statistics ) {
    ContentValues values = new ContentValues();

    long ID = getLatestID(db)+1;

    values.put(KEY_STATISTICS_ID, ID);

    ... //not important to the question

}

private long getLatestID(SQLiteDatabase db){
    String selectQuery = "SELECT  MAX(" + KEY_STATISTICS_ID +") FROM " + TABLE_STATISTICS;

    Cursor c = db.rawQuery(selectQuery, null);

    c.moveToFirst();
    int id = 0;
    Log.e("count", String.valueOf(c.getCount()));

    if (c.moveToFirst()){
       ...
    }

    return id;
}
}

更新表后,它又被创建了。因此,当我尝试添加一个新值时,我遇到了问题,因为它总是跳入 if 子句,因为 c.moveToFirst() 总是返回 true。

所以我试着检查 c.getCount() 是否会返回 true 但遗憾的是它总是返回 1。所以问题是:为什么它会在空表上返回 1? (我确实使用 Questoid SQLite 浏览器并且表格真的是空的)

最佳答案

您使用聚合函数MAX,所以阅读documentation:

There are two types of simple SELECT statement - aggregate and non-aggregate queries. A simple SELECT statement is an aggregate query if it contains either a GROUP BY clause or one or more aggregate functions in the result-set.

An aggregate query without a GROUP BY clause always returns exactly one row of data, even if there are zero rows of input data.

关于Android sqlite - 空表上的光标计数不为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26043996/

相关文章:

android - Xamarin.Android.D8.Target - "java.exe"在创建混淆器配置文件时以代码 1 退出

java - 从Service类中的SQLliteDatabaseHelper获取数据

android - 每次调用 rawQuery() 时是否必须关闭 Cursor 对象?

c++ - 如何让qlabel在场景中跟随光标

android - 微调器项目选择 radio 丢失

testing - 安卓 WebView SSL 'Security Warning'

sqlite - SQLite 中的 Unix 时间戳或 IS0-8601 日期字符串

java - Sqlite 查询返回包含 0 行的游标

android - 如何通过 Volley 接收html响应

Android SQLite 和服务器数据库 2 方式离线同步