#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» в свой запрос.
Попробуйте сначала удалить таблицу!