SQLiteConstraintException约束失败

时间:2015-08-06 12:07:06

标签: android sqlite

每当我尝试插入到客户端表时,我都会收到异常。 这是客户表:

db.execSQL("CREATE TABLE " + TABLE_CLIENTS + " (" +
                COLUMN_CID + " INTEGER PRIMARY KEY, " +
                COLUMN_CLIENTNAME + " TEXT, " + COLUMN_ADDRESS + " TEXT, " + COLUMN_LOANAMOUNT + " DECIMAL)");

这是插入方法:

public long addClients(Client c) {
    ContentValues cv = new ContentValues();
    cv.put(COLUMN_CID, c.getCId());
    cv.put(COLUMN_CLIENTNAME, c.getCName());
    cv.put(COLUMN_ADDRESS, c.getAddress());
    cv.put(COLUMN_LOANAMOUNT, c.getLoanamount());

    return ourDatabase.insert(TABLE_CLIENTS, null, cv);
}

正好在LogCat中读取对象,所有属性都是正确的。

logcat的: logcat的:

 2.017 25026-25026/com.example.androidserversocket 
    D/sa:﹕ 0 Hussein Nabatieh 32 08-06 15:12:12.017 25026-25026/com.example.androidserversocket 
    D/type:﹕ C 08-06 15:12:12.017 25026-25026/com.example.androidserversocket 
    D/Client:﹕ in c 08-06 15:12:12.027 25026-25026/com.example.androidserversocket 
    E/SQLiteDatabase﹕ Error inserting loanamount=32.0 address=Nabatieh cid=0 cname=Hussein android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

2 个答案:

答案 0 :(得分:1)

表中似乎已存在c.getCId()的ID。

之前尝试使用此ID,如果存在,则可能需要进行更新。

答案 1 :(得分:0)

您的问题是已存在具有相同cid值的行。

INTEGER PRIMARY KEY列可以自动获取未使用的值,但只有当您没有明确地将此列的值放入ContentValues对象时,才会执行此操作。