Моя база данных не добавит значения. У меня есть код

Что-то не так с моим кодом? setStatus всегда возвращает -1. Прослеживал код для ошибок, но я не могу его найти. Может быть, вы здесь, ребята. Очень расстраивает.

Так я назвал базу данных:

SQLDatabaseLevelOne sql;

        sql = new SQLDatabaseLevelOne(MainActivity.this);
        sql.open();
        sql.setStatus("1");
        sql.close();

Это из моего SQLDatabaseLevelOne.class:

public static final String KEY_ID = "_id";
    public static final String KEY_QUESTION_STATUS = "_STATUS";
    public static final String KEY_SCORE = "_SCORE";
    //public static final String KEY_INDEX = "_INDEX";

    private static final String DATABASE_NAME = "passworddb";
    private static final String DATABASE_TABLE = "passwordtable";
    private static final int DATABASE_VERSION = 1;
    //private int index_score;

    private DbHelper dbHelper;
    private final Context dbContext;
    private SQLiteDatabase sqlDatabase;

    private static class DbHelper extends SQLiteOpenHelper {

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase database) {
            /*database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT NOT NULL, " +
                    KEY_INDEX + " TEXT NOT NULL);");*/
            database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT NOT NULL);");
        }

        @Override
        public void onUpgrade(SQLiteDatabase database, int arg1, int arg2) {
            database.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(database);
        }
    }

        public SQLDatabaseLevelOne(Context context) {
            dbContext = context;
        }

        public long setStatus (String status) {         
            ContentValues dbContentValues = new ContentValues();
            dbContentValues.put(KEY_QUESTION_STATUS, status);
            //dbContentValues.put(KEY_SCORE, score);
            return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues);
        }

public void open() {
            dbHelper = new DbHelper(dbContext);
            sqlDatabase = dbHelper.getWritableDatabase();
            return;
        }

        public void close() {
            dbHelper.close();
        }
0
nl ja de
потому что KEY_SCORE TEXT NOT NULL имеет ограничение (NOT NULL), которое не выполняется, поскольку вы не даете ему значения.
добавлено автор njzk2, источник
Все в порядке, у всех нас есть более чем достаточно очков. Просто «заплатите за это» когда-нибудь в будущем, помогая кому-то другому.
добавлено автор Sam, источник
Я не знаю, как поблагодарить всех. Все ответы верны. Я принял ответы. Я использовал NOT NULL, не думая о влиянии на базу данных.
добавлено автор droidH, источник

3 ответы

Измените таблицу Создать запрос как

  database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT);");

потому что вы создаете KEY_SCORE как TEXT NOT NULL , тогда u должен передать значение для столбца KEY_SCORE

NOTE : after Changing Table structure you will need to change DB version

2
добавлено
(+1) Hey ρяσѕρєя K, похоже, у вас будет больше очков, чем я за пару недель!
добавлено автор Sam, источник

В setStatus() вызов sqlDatabase.insert() возвращает -1 . Это означает, что ваши данные не могут быть вставлены.

Попробуйте заменить его на sqlDatabase.insertOrThrow() ; это вызовет исключение при неудаче, что значительно облегчит выяснение того, что на самом деле пошло не так.

1
добавлено
Да, я поддержал другие ответы, которые правильно поставили диагноз актуальной проблемы.
добавлено автор Graham Borland, источник
Он имеет столбцы not null , а его вставка пропускает эти столбцы -> с ошибкой вставки.
добавлено автор WarrenFaith, источник

Вы не зарегистрировали ошибки LogCat, поэтому могут возникнуть другие проблемы. Но вы должны установить для значение KEY_QUESTION_STATUS и KEY_SCORE , так как вы указали, что они не могут быть null в таблице определение:

KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
KEY_SCORE + " TEXT NOT NULL);");

Что происходит, когда вы пытаетесь это сделать?

public long setStatus (String status) {         
    ContentValues dbContentValues = new ContentValues();
    dbContentValues.put(KEY_QUESTION_STATUS, status);
    dbContentValues.put(KEY_SCORE, "something");
    return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues);
}
1
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Разработка СУБД
Разработка СУБД
143 участник(ов)

Android Rus
Android Rus
68 участник(ов)