android SQLiteConstraintException:错误代码19:约束失败

时间:2011-09-29 18:43:32

标签: android sqlite exception constraints

我得到了android SQLiteConstraintException:错误代码19:约束失败异常。我看到在这个主题中有很多问题,我已经读了很多,但仍然无法弄清楚我做错了什么。仅仅是我的表架构。

    private static final String DATABASE_CREATE = "CREATE TABLE calls (call_ID 
    INTEGER        AUTO    INCREMENT PRIMARY KEY NOT NULL, caller_id TEXT NOT NULL, "+
    caller_name TEXT NOT NULL, called_id TEXT NOT NULL, called_name    TEXT NOT NULL," + 
    "start_time TEXT NOT NULL, end_time TEXT NOT NULL);";

我添加一行,它会抛出异常。

   public long addCall(String caller_id, String caller_name, String called_id,
   String called_name, String start, String end) {
      ContentValues initialValues = createContentValues(caller_id, caller_name,called_id,called_name, start,end);
    return database.insert(DATABASE_TABLE, null, initialValues);
}

我重写了SQLHelpers onOpen方法,在每次打开时清除表格,但它没有帮助。

public void onOpen (SQLiteDatabase database){
    database.execSQL("DROP TABLE IF EXISTS calls");
    onCreate(database);
    Log.w(DBHelper.class.getName(),"DB onOpen");
}

更新:问题不在于,我尝试传递null,因为我只添加了这些字符串,并且我收到了错误。

    dbAdapter.addCall("test", "test","test", "test", "test", "test");

更新2:这是我的createContentvalue方法:

public static final String CALLER_ID = "caller_id";
public static final String CALLER_NAME = "caller_name";
public static final String CALLED_ID = "called_id";
public static final String CALLED_NAME = "called_name";
public static final String START = "start_time";
public static final String END = "end_time";
public static final String DATABASE_TABLE = "calls";

    private ContentValues createContentValues(String caller_id, String caller_name, String called_id, String called_name, String start, String end) {
    ContentValues values = new ContentValues();
    values.put(CALLER_ID, caller_id);
    values.put(CALLER_NAME, caller_name);
    values.put(CALLED_ID, called_id);
    values.put(CALLED_NAME, called_name);
    values.put(START, start);
    values.put(END, end);
    return values;
}

1 个答案:

答案 0 :(得分:1)

检查方法参数中的null值? ; - )

根据更新进行修改

哈,我知道:null值。 ;-)
您使用CALLER_NAME两次......(顺便提一下CALLER_ID

根据评论进行修改

null值外,他还试图设置主键(意外)。这可能是主要原因(除了实际的null值)。