当我使用deleteRow方法时,它会删除行的所有值(想象总共0行5行中的第2行),但是当我使用我的getLastID方法时,它仍然会返回lastID 5,就像还有5个数字一样。这是我的方法
删除行id中给出的所有值的方法
public Integer deleteRow(String id){
return database.delete(TABLE_NAME,"ID=?",new String[]{id});
}
getLastID方法
public int getLastId() {
String query = "SELECT MAX(id) AS max_id FROM " + TABLE_NAME;
Cursor cursor = database.rawQuery(query, null);
int id = 0;
if (cursor.moveToFirst())
{
do
{
id = cursor.getInt(0);
} while(cursor.moveToNext());
}
cursor.close();
return id;
}
答案 0 :(得分:1)
你的删除只删除了一行ID,但这并不意味着最后一行被删除,想象你有这个表:
|---------------------|------------------|
| ID | other |
|---------------------|------------------|
| 1 | 34 |
|---------------------|------------------|
| 2 | 34 |
|---------------------|------------------|
| 3 | 34 |
|---------------------|------------------|
如果你max(id)
它将返回3
,如果你删除了ID 2
,你最终会得到如下表:
|---------------------|------------------|
| ID | other |
|---------------------|------------------|
| 1 | 34 |
|---------------------|------------------|
| 3 | 34 |
|---------------------|------------------|
您的max(id)
将继续返回3
,因为该函数只返回列上的较高值。
答案 1 :(得分:0)
数据库正在完成它的设计目标。它保留最后使用的ID,并在每次分配新ID时将其递增1。
它不会保留所有ID分配的池,并尝试重用删除行的ID。这是非常复杂和缓慢的。