Ошибка при вставке данных в базу данных с использованием значений содержимого - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь вставить данные в базу данных, но выдает следующую ошибку.

в табличных местах нет столбца с именем PLACE_NAME (код 1): при компиляции: INSERT INTO place (PLACE_NAME, IS_SELECTED, placeID, LONGITUDE, LATITUDE) VALUES (?,?,?,?,?)

вот как я создаю свою таблицу базы данных

 // Create a table to hold the places data
    final String SQL_CREATE_PLACES_TABLE = "CREATE TABLE IF NOT EXISTS " + PlaceContract.PlaceEntry.TABLE_NAME + " (" +
            PlaceContract.PlaceEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + PlaceContract.PlaceEntry.COLUMN_PLACE_NAME + " VARCHAR, " +
            PlaceContract.PlaceEntry.COLUMN_PLACE_LATITUDE +  " VARCHAR, " +  PlaceContract.PlaceEntry.COLUMN_PLACE_LONGITUDE +  " VARCHAR, "+
            PlaceContract.PlaceEntry.COLUMN_PLACE_IS_SELECTED +  " VARCHAR, " +
            PlaceContract.PlaceEntry.COLUMN_PLACE_ID + " TEXT NOT NULL, " +
            "UNIQUE (" + PlaceContract.PlaceEntry.COLUMN_PLACE_ID + ") ON CONFLICT REPLACE" +
            "); ";

, пожалуйста, помогите мне, что я делаю неправильно ....

1 Ответ

2 голосов
/ 17 мая 2019

Наиболее распространенными причинами отсутствия столбца являются ошибки ввода и неправильное представление о методе onCreate .

Первый вариант маловероятен, если вы последовательно используете один источник дляимя столбца, например, если вы используете PlaceContract.PlaceEntry.COLUMN_PLACE_NAME для ссылки на столбец place_name.

С последним метод onCreate запускается автоматически только при создании базы данных, любые изменения, вносимые в схему, такие как добавление столбцов,не будет применяться.Таким образом, если вы изменили строку SQL CREATE, чтобы добавить столбец PLACE_NAME, этот столбец не будет добавлен.

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

  1. Удалите данные приложения и перезапустите (база данных будет удалена (если база данных не хранится вне приложения (не рекомендуется и не является типичным сценарием))).
  2. УдалитеApp и перезапустите (также удалите данные приложения).
  3. IF onUpgrade удалит указанную таблицу или таблицы и затем заново создаст таблицы (обычно вызывая onCreate ), затем можно увеличить версию базы данных (это 4-й параметр супер-вызова при создании класса Database Helper (т. Е. Класса, расширяющего SQLiteOpenHelper)).

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

...