Android sqlite вставить запись, если не существует - PullRequest
4 голосов
/ 11 марта 2012

Я хочу добавить новый элемент (сыр) в таблицу sqlite, но только в том случае, если он не существует. У меня есть только два столбца в таблице: _id (KEY_ROWID_PR) и product_name (KEY_NAME_PR).

Я пытался с этим кодом, но он выдает ошибку:

public void populate_base_lists2(String tablename, String item) {
        ourDatabase.execSQL("INSERT INTO " + tablename + " (" + KEY_NAME_PR + ") SELECT * FROM (SELECT " + item  + ") WHERE NOT EXISTS (SELECT " + KEY_NAME_PR + " FROM " + tablename + " WHERE " + KEY_NAME_PR + " = " + item + ") LIMIT 1;");
}

03-11 17: 27: 20.972: E / AndroidRuntime (658): вызвано: android.database.sqlite.SQLiteException: нет такого столбца: сыр: INSERT INTO PR_Dairy_Products (product_name) SELECT * FROM (SELECT Сыр) ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ product_name ОТ PR_Dairy_Products ГДЕ название продукта = сыр) LIMIT 1;

Код отсюда: MySQL: вставить запись, если ее нет в таблице

нет такого столбца: сыр, хорошо, я изменил эту часть на KEY_NAME_PR, тогда ошибка была такой же, но без такого столбца: product_name. Этот столбец определенно существует.

Более того, мне нужно некоторое объяснение этого кода. У меня есть знания SQL на определенном уровне, но я не могу получить это.

Спасибо

1 Ответ

3 голосов
/ 11 марта 2012

Я думаю, вам может понадобиться одинарная кавычка вокруг переменной item всякий раз, когда она появляется, потому что это значение, а не имя столбца. Попробуйте этот код:

public void populate_base_lists2(String tablename, String item) {
ourDatabase.execSQL("INSERT INTO " + tablename +
" (" + KEY_NAME_PR + ") SELECT * FROM (SELECT '" + item  + "')
WHERE NOT EXISTS (
SELECT " + KEY_NAME_PR +
" FROM " + tablename + " WHERE " + KEY_NAME_PR + " = '" + item + "'
) LIMIT 1;");
}

Надеюсь, это поможет.

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