繁体   English   中英

从Java中的SQLlite数据库表中获取第一个和最后一个主键值?

[英]Get first and last primary key values from SQLlite db table in Java?

我正在尝试为Java中的DatabaseHandler类创建方法,以从数据库中的单个表获取最小和最大行ID。 我是SQLite的新手(可与Android一起使用),所以不确定从这里开始做什么:

public int getMaxId() {
    String countQuery = "SELECT last_insert_rowid() FROM " + TABLE_RESOURCES;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int maxId = <SOMETHING>
    return maxId;
}

(我假设我可以将第一行ID的sql查询更改为“ first_insert_rowid()”,但如何获取并返回该int?)

更多背景信息:我的表不断地被写入和删除,因此行ID有时会像'2,3,4,5,8,9,11,13'等,依此类推-我正在为循环从可用的最低行ID开始,一直到最高,并忽略空白。

编辑:根据答案,像这样吗? 只有它给出了CursorOutOfBoundsException ...

public int getMaxId() {
    String countQuery = "SELECT MAX(rowid) FROM " + TABLE_RESOURCES;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int maxId = 0;
    if (cursor.moveToFirst()) {
        maxId = cursor.getInt(0);
        return maxId;
    } else
    {
        return maxId;
    }

}

使用MIN(rowid)MAX(rowid)代替last_insert_rowid()来获取表中rowid的最小值和最大值。

使用类似

if (c.moveToFirst()) {
    int maxId = cursor.getInt(0);
}

从游标的第一行获取值,其中0是您感兴趣的列索引。

另外,Android的内置数据库引擎是SQLite,而不是MySQL。

使用Order by和LIMIT 1。

通过ASC LIMIT 1进行的ID订购将给您最少的费用,通过DESC LIMIT 1进行的ID订购将给您最多的费用

 public int  getMinId(){
    int minId = null;
    String selectQuery = "SELECT * FROM " + TABLE_RESOURCES + " " + KEY_ID +" ORDER BY ASC LIMIT 1";

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery,null);

    cursor.moveToFirst();
    if(cursor.getCount() > 0){

        minId= cursor.getInt(0);

    }
    cursor.close();
    db.close();

    return minId;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM