Android sqlite отсутствует столбец

#android #sqlite

#Android #sqlite

Вопрос:

В моей базе данных SQLite отсутствует столбец, который, как я знаю, существует. Я не смогу извлечь базу данных из эмулятора Android, потому что нет способа заполнить ее с помощью эмулятора без существенного переписывания кода.

logcat возвращает sqlite returned: error code = 1, msg = table items has no column named checkedout , когда я добавляю элемент в эту таблицу. Ниже приведено объявление таблицы, а под ним — функция insert. Я где-то неправильно проверяю орфографию?

  static final String CREATE_ITEM_TABLE ="create table if not exists " CHECKOUT_TABLE " ("
          KEY_ROWID   " INTEGER PRIMARY KEY,"
          KEY_STORE  " TEXT,"
          KEY_INVID   " TEXT,"
          KEY_PRODUCT   " TEXT,"
          KEY_PRICE   " TEXT,"
          KEY_WEIGHT   " TEXT,"
          KEY_CATEGORY   " TEXT,"
          KEY_QUANTITY   " TEXT,"
          KEY_CHECKEDOUT   "INTEGER"
          ");";



//store item
public long storeNewItem(String store, String invid, String product, 
        String price, String weight, String category, String quantity, int checkedout) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_STORE, store);
    initialValues.put(KEY_INVID, invid);
    initialValues.put(KEY_PRODUCT, product);
    initialValues.put(KEY_WEIGHT, price);
    initialValues.put(KEY_CATEGORY, weight);
    initialValues.put(KEY_QUANTITY, quantity);
    initialValues.put(KEY_CHECKEDOUT, checkedout); //just in case I want to store these items, but server should know

    if(checkedout==0)
    {
        return sqlDb.insert(CHECKOUT_TABLE, null, initialValues);
    }
    else //if checkedout==true
    {
        return sqlDb.insert(PAST_ITEM_TABLE, null, initialValues);
    }

}
  

Комментарии:

1. Действительно ли CHECKOUT_TABLE и PAST_ITEM_TABLE определены одинаково?

2. да. checkout_table будет часто очищаться и удаляться. past_item_table будет немного увеличиваться и никогда не будет очищен, пока не будут достигнуты другие ограничения

3. В перспективе DDMS откройте вкладку File Explorer, найдите свою базу данных, откройте диск и проверьте, например, структуру базы данных браузера SQLite

4. какой вызов insert выдает ошибку?

5. @Mike на реальном устройстве папка с данными ничего не отображает.

Ответ №1:

ответ заключался в том, что в последнем столбце не было пробела в объявлении

KEY_QUANTITY " TEXT,"
KEY_CHECKEDOUT "INTEGER"
");";

должно было быть

KEY_QUANTITY " TEXT,"
KEY_CHECKEDOUT " INTEGER"
");";

вздох

Ответ №2:

Извините, я, похоже, не могу записать это как комментарий, поэтому я записал это как ответ:

Я предполагаю, что вы создали таблицу с более ранней версией вашей программы, где не было столбца «извлечено». Теперь таблица не создается заново, потому что вы включаете «IF NOT EXISTS» в свой запрос.

Попробуйте сначала удалить таблицу!