Обновить заявление в sqlite - PullRequest
0 голосов
/ 20 июля 2010

Эй, я хочу обновить таблицу, если поле не заполнено, или вставить новое значение, заданное пользователем.

Для этого я выбираю все, присутствующее в таблице, и проверяю, существует ли введенное пользователем имя, обновите его или вставьте.

Однако проблема в том, что в случае отсутствия данных в таблице запрос завершается неудачно и данные не вставляются в таблицу.

NSString *query = @"select * from PPM";
sqlite_stmt *statement;

if(sqlite_prepare_v2(database,[query UTF8string],-1,&statement,NULL) == SQLITE_OK)
{
    while (sqlite3_step(statement) == SQLITE_ROW)
     //select data from table  
     //if value entered is same as entered by user update the table
     //else insert in the table
}

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Как насчет INSERT OR REPLACE? Вы можете использовать его с ограничениями UNIQUE в вашей структуре базы данных, чтобы заменить значение, если оно уже существует, и вставить его, если его там еще нет.

shell> sqlite3
SQLite version 3.6.23
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE user(name UNIQUE, value);
sqlite> INSERT OR REPLACE INTO user VALUES("foo", 123);
sqlite> SELECT * FROM user;
foo|123
sqlite> INSERT OR REPLACE INTO user VALUES("foo", 321);
sqlite> SELECT * FROM user;
foo|321
1 голос
/ 20 июля 2010

Если вы используете вариант INSERT OR REPLACE команды INSERT, вам не нужно проверять существующие данные, поскольку SQLite сделает это за вас, если есть столбец с ограничением UNIQUE.

Например:

CREATE TABLE db.table(id UNIQUE, name);

INSERT OR REPLACE INTO db.table (id, name) VALUES (5, 'exep');

Если в таблице существует идентификатор 5, эта команда будет вести себя как обновление, в противном случае это будет вставка.

См. http://www.sqlite.org/lang_conflict.html для более подробной информации.

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