SQLiteConstraintException? [Дубликат]

Использование выражения Immediately-Вызываемой функции - самый простой и удобный способ заключить индексную переменную:

for (var i = 0; i < 3; i++) {

    (function(index) {
        console.log('iterator: ' + index);
        //now you can also loop an ajax call here 
        //without losing track of the iterator value: $.ajax({});
    })(i);

}

Это отправляет итератору i в анонимный функцию которого мы определяем как index. Это создает закрытие, где переменная i сохраняется для последующего использования в любых асинхронных функциях внутри IIFE.

6
задан Pang 15 May 2016 в 04:07
поделиться

2 ответа

У вас есть следующие значения NOT NULL в определении вашей базы данных:

CONTENT
PATH
VIDEO
TIME

Но в вашем addDB вы добавляете CONTENT и TIME в ContentValues, чтобы он определенно искал PATH и VIDEO. Если они отсутствуют, это даст ошибку. Существует два решения:

Решение 1:

удалить NOT NULL ограничение из VIDEO и PATH:

        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
            + " TEXT NOT NULL," + PATH
            + " TEXT," + VIDEO
            + " TEXT," + TIME
            + " TEXT NOT NULL)");

Решение 2:

добавить VIDEO и PATH в ContentValues:

private void addDB() {
    ContentValues cv = new ContentValues();
    cv.put(SecretAlbumDB.CONTENT, editText.getText().toString());
    cv.put(SecretAlbumDB.TIME, getTime());
    cv.put(SecretAlbumDB.VIDEO, getVideo());
    cv.put(SecretAlbumDB.Path, getPath());

    dbWriter.insert(SecretAlbumDB.TABLE_NAME, null, cv);
}
9
ответ дан Pooya 25 August 2018 в 17:24
поделиться

Конечно, вы объявили все поля (столбцы) как NOT NULL, и вы не поместили значение в эти поля при вставке cv. Либо сделайте эти столбцы null приемлемыми, либо поместите все значения в cv для всех столбцов, которые являются NOT NULL.

1
ответ дан Shree Krishna 25 August 2018 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: