从Java中的SQLlite db表中获取第一个和最后一个主键值?
我试图用Java为DatabaseHandler类创建方法,以从数据库中的单个表中获取最小和最大行ID。我是SQLite的新手(使用Android),因此我不确定接下来该怎么做:从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
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;
}