SQL删除保留ID未删除

时间:2017-07-18 21:27:29

标签: java android

当我使用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;

}

2 个答案:

答案 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。这是非常复杂和缓慢的。