android SQLiteConstraintException: код ошибки 19: ограничение не выполнено - PullRequest
0 голосов
/ 29 сентября 2011

Я получил 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);
}

Я переопределил метод onOpen SQLHelpers, чтобы очистить таблицу при каждом открытии, но это не помогло.

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

ОБНОВЛЕНИЕ: Проблема не в том, что я пытаюсь передать ноль, потому что я только добавляю эти строки, и я получил ошибку.

    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 Ответ

1 голос
/ 29 сентября 2011

Проверено на null значения в аргументах вашего метода? ; -)

Редактирование на основе обновления

Хаа, я знал это: null значение. ; -)
Вы используете CALLER_NAME дважды ... (кстати CALLER_ID тоже)

Редактировать на основе комментариев

Помимо значения null, он пытался установить первичный ключ (случайно). Это могло быть основной причиной (помимо фактического null значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...