[英]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.