android.database.sqlite.SQLiteConstraintException: код ошибки 19: ограничение failedexception

Я создал таблицу с именем resources, но когда я вставляю в нее значения, возникает это исключение:

android.database.sqlite.SQLiteConstraintException:
error code 19: constraint failedexception

Вот мой оператор create table:

public static final String DATABASE_CREATE = 
    "CREATE TABLE " + table_resources + "(ID INTEGER PRIMARY KEY, 
    KEY_TYPE text, KEY_ENCODING text, KEY_WIDTH text, KEY_HEIGHT text, 
    KEY_DATA text, KeyIId text)";

Ниже приведен мой код insert:

JSONObject show = data.getJSONObject(i);
if (show.get("type").equals("resource_updates")) {
    JSONArray resources = show.getJSONArray("resources");
    try {
        System.out.println("length of resources is is " + resources.length());
        for (int resourceIndex = 0; resourceIndex < resources.length(); resourceIndex++) {
            type = resources.getJSONObject(resourceIndex).getString("type").toString();
            encoding = resources.getJSONObject(resourceIndex).getString("encoding").toString();
            data1 = resources.getJSONObject(resourceIndex).getString("data").toString();
            id = resources.getJSONObject(resourceIndex).getString("id").toString();
            try {
                width = resources.getJSONObject(resourceIndex).getString("width").toString();
            } catch (Exception e) {
                System.out.println(e);
                width = "null";
            }
            try {
                height = resources.getJSONObject(resourceIndex).getString("height").toString();
            } catch (Exception e) {
                e.printStackTrace();
                height = "null";
            }
            db.insert(type,encoding,width,height, data1,iid);
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e + "exception");
        System.out.println("exception in  the resources");
    }
}

Может ли кто-нибудь сказать мне, где может быть проблема?


person ekjyot    schedule 14.11.2011    source источник
comment
Если вы ожидаете, что другие будут отлаживать ваш код, будет лучше, если вы предоставите всю трассировку стека.   -  person Arnab Chakraborty    schedule 14.11.2011
comment
убедитесь, что ваша таблица создана правильно? Я думаю, у вашего запроса на создание тоже есть проблема. вы не указали пробел после имени таблицы в своем запросе на создание. Также имена столбцов, которые вы используете для извлечения данных из таблицы, отличаются от тех, которые вы используете в запросе на создание.   -  person Hiral Vadodaria    schedule 14.11.2011


Ответы (2)


Ошибка ограничения обычно означает, что вы передали значение null в столбец, который вы объявляете как not null при создании таблицы.

person skynet    schedule 14.11.2011
comment
Не могли бы вы также опубликовать свой метод insert? Я предполагаю, что это вспомогательный метод, который вызывает фактический метод SQLiteDatabase.insert с вашими данными. - person skynet; 14.11.2011
comment
идеальное решение для таблицы без первичных ключей!! - person mayank_droid; 04.09.2012

Чтобы получить больше информации об ошибках SQLite, можно использовать dumpsys ADB:

adb shell dumpsys dbinfo -v

в сочетании с grep:

adb shell dumpsys dbinfo -v | grep executeForLastInsertedRowId

или два раза grep:

adb shell dumpsys dbinfo -v | grep executeForChangedRowCount | grep failed
person Martin Zeitler    schedule 17.07.2016