android.database.sqlite.SQLiteConstraintException:PRIMARY KEY必须是唯一的(代码19)

时间:2014-05-19 09:55:52

标签: android database sqlite

我在lead_table中插入值但由于PRIMARY KEY必须是唯一的,因此会收到错误。 以下是我的代码。请指导我如何解决它,因为我很难找到确切的错误。我很难找到确切的错误。

public void insertLead(ArrayList<String> data) {
        String insertString = "insert into lead_table " + " Values(";
        int row = 0;
        String inString = "";
        for (int i = 0; i < data.size(); i++) {
        inString = inString + "\"" + data.get(i) + "\",";
        }
        inString = inString.substring(0, inString.length() - 1);
        row = mDb.rawQuery("select * from lead_table;", null).getCount() + 1;
        insertString = insertString + row + "," + inString + ");";
        mDb.execSQL(insertString);
    }

1 个答案:

答案 0 :(得分:1)

此代码尝试通过计算表中的记录来计算尚未使用的ID值,但这并不能保证结果值实际上未使用。 例如,如果表格包含三个ID值134,则此代码计算的值将为4

您的PRIMARY KEY列已定义为AUTOINCREMENT。 documentation说:

  

如果在插入上没有指定ROWID,或者指定的ROWID的值为NULL,则会自动创建适当的ROWID。

因此,您可以通过使用NULL而不是数字告诉数据库为您创建ID:

    ...
    inString = inString.substring(0, inString.length() - 1);
    // no row variable
    insertString = insertString + "NULL" + "," + inString + ");";
    mDb.execSQL(insertString);
    ...