Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中的SQLlite db表中获取第一个和最后一个主键值?_Java_Android - Fatal编程技术网

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

从Java中的SQLlite db表中获取第一个和最后一个主键值?,java,android,Java,Android,我试图用Java为DatabaseHandler类创建方法,以从数据库中的单个表中获取最小和最大行ID。我是SQLite的新手(使用Android),因此我不确定接下来该怎么做: public int getMaxId() { String countQuery = "SELECT last_insert_rowid() FROM " + TABLE_RESOURCES; SQLiteDatabase db = this.getReadableDatabase(); Cu

我试图用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;
}
使用
MIN(rowid)
MAX(rowid)
而不是
last\u insert\u rowid()
获取表中rowid的最小值和最大值

使用类似

if (c.moveToFirst()) {
    int maxId = cursor.getInt(0);
}
从光标的第一行获取值,其中
0
是您感兴趣的列索引


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

使用Order by和LIMIT 1

ASC限制1下的ID订单将为您提供最小值,而DESC限制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;
}

我更新了我的答案。检查我更新的答案Android.database.sqlite.SQLiteException:没有这样的列:DESC(代码1):,编译时:按DESC限制1从资源id顺序选择*。。。我认为语法有错误。。。但是谢谢你!这看起来很快就可以工作了……只需编写String selectQuery=“SELECT*FROM tablename columnname ORDER BY ASC LIMIT 1”;我用你的修改更新了我的帖子-像这样吗?我得到了一个CursorIndexOutOfBounds异常…这可能有效!但是,如何从游标中实际获取maxId整数呢?
 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;
}