ОТВЕТ. Для строковых полей необходимо заключать их в одинарные кавычки.
Я продолжаю получать сообщение «нет такого столбца: значение (код 1)», не понимая, почему.
Я пытаюсь хранить людей с индексами, чтобы я мог их однозначно идентифицировать и извлекать более сложные данные, которые не нужно запрашивать как json, для чего я использую Gson для преобразования в Json и из объекта.
Отредактирован запрос на создание, чтобы показать работающую функцию UNIQUE. Здесь вы можете найти дополнительную информацию о ключевых словах ON CONFLICT
//Creation query
private static final String CREATE_PERSON_TABLE = "CREATE TABLE IF NOT EXISTS
"+PERSON_TABLE_NAME+" (id INTEGER PRIMARY KEY, firstname VARCHAR, lastname VARCHAR,
zipcode VARCHAR, birthdate VARCHAR, json VARCHAR,
UNIQUE(lastname, zipcode, birthdate) ON CONFLICT REPLACE);";
//Insert or replace query execution
getWritableDatabase().execSQL("INSERT OR REPLACE INTO "+PERSON_TABLE_NAME+"
(firstname, lastname, zipcode, birthdate, json) VALUES
("+person.getFirstname()+","+person.getLastName()+","+person.getZipcode()+",
'"+person.getBirthdate+"','"+person.getLifestoryJson()+"')");
Трассировки стека
android.database.sqlite.SQLiteException: no such column: Hank (code 1): , while compiling: INSERT OR REPLACE INTO person (firstname,
lastname, zipcode, birthdate, json) VALUES (Hank,Hairy,8888HH,'06-01-1966','{"events":"[]","comments":[],"storyList":[],"favoriteFoods":"cheddar","peperoni":"lasagna"}')
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
Я часами смотрю и сравниваю с учебниками, я просто не вижу, что происходит не так. Похоже, что по какой-то причине столбцы, которые я передаю, игнорируются, а вместо этого используются значения в качестве столбцов. Любая помощь или объяснение того, что может вызвать эту ошибку, очень ценятся.