SQLITE Query принудительно закрывает приложение - PullRequest
1 голос
/ 15 февраля 2011

Я проверил все, и создание базы данных в порядке, когда я пытаюсь добавить в него данные, которые заставляют приложение закрываться. Я не могу понять, почему.

    db.execSQL("CREATE TABLE IF NOT EXISTS " +
            SAMPLE_TABLE_NAME2    
            + " (GenID INT, "
            + " Nxtq INT);");

    db.execSQL("INSERT INTO " +
            SAMPLE_TABLE_NAME2 +
            " Values (1,1);");

Ошибка, которую я получаю:

Ошибка 1 (общая таблица содержит 4 столбца, но было предоставлено 2 значения) при подготовке 'INSERT INTO general values ​​(1,1)

Перед этими двумя запросами есть кое-что, что полностью.

    db =  this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null);

    db.execSQL("CREATE TABLE IF NOT EXISTS " +
            SAMPLE_TABLE_NAME +
            " (ID INT(3), Questions VARCHAR, Answer1 VARCHAR," +
            " Answer2 VARCHAR, Answer3 VARCHAR," +
            " Answer4 VARCHAR, CorrectAnswer INT(1), Reason VARCHAR);");

    db.execSQL("CREATE TABLE IF NOT EXISTS " +
            SAMPLE_TABLE_NAME2    
            + " (GenID INT, "
            + " Nxtq INT);");

    db.execSQL("INSERT INTO " +
            SAMPLE_TABLE_NAME2 +
            " Values (1,1);");

Ответы [ 5 ]

2 голосов
/ 19 февраля 2011

попробуйте изменить имя «general» на что-то другое, например «general_new», и посмотрите, работает ли скрипт, как уже упоминалось, как правило, таблица вообще может существовать (даже если вы не думаете, что сделали ее самостоятельно).

0 голосов
/ 18 февраля 2011

Каковы соответствующие значения SAMPLE_TABLE_NAME и SAMPLE_TABLE_NAME2?Возможно ли, что они равны так:

private static final String SAMPLE_TABLE_NAME = "general";
private static final String SAMPLE_TABLE_NAME2 = "general";
0 голосов
/ 15 февраля 2011

@ Макс. Для вставки попробуйте использовать db.insert (........);

0 голосов
/ 16 февраля 2011

Соответствующая таблица с именем general уже существует до выполнения вышеуказанного кода.Эта ранее существовавшая таблица имеет четыре столбца, поэтому INSERT INTO с двумя столбцами завершается ошибкой.CREATE TABLE ничего не делает, потому что IF NOT EXISTS имеет значение false.

Вы упоминаете, что база данных создана правильно - ваше приложение запускается с пустой базой данных или может повторно использовать существующую?В качестве альтернативы, возможно, существует некоторый код, который вызывается ранее, который создает таблицу с именем general с 4-х колоночной схемой.Это противоречит вышесказанному.

0 голосов
/ 15 февраля 2011

Используйте adb logcat, DDMS или перспективу DDMS в Eclipse, чтобы проверить LogCat и посмотреть трассировку стека, связанную с вашим исключением. Сделайте это перед публикацией здесь и включите соответствующие биты вывода LogCat, если вы их не понимаете.

В этом случае я подозреваю, что вы обнаружите, что INT(3) не является действительным типом данных SQLite , но это только предположение.

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