2010-07-20 7 views
0

Hey ce que je veux faire est de mettre à jour une table si le champ existe ou d'insérer la nouvelle valeur donnée par l'utilisateur.Mise à jour de l'instruction dans sqlite

Ce que je fais est tout sélectionner présent dans la table et vérifier si le nom entré par l'utilisateur mise à jour existe den ou insérer sinon il.

Cependant, le problème est quand il n'y a pas de données dans la table la requête échoue et aucune donnée est insérée dans le tableau.

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 
} 
+0

Montrez-nous votre question ou quelque chose sur la structure de données. Sinon, les réponses seront assez génériques. – MJB

+0

Je ne veux pas remplacer les données, mais mettre à jour les données, donc j'ai besoin des données existantes dans la base de données, besoin de faire quelques manipulations, puis mettre à jour ce champ. Comment fait-on ça? – user391301

Répondre

3

Comment sur INSERT OR REPLACE? Vous pouvez l'utiliser avec les contraintes UNIQUE dans votre structure de base de données pour remplacer une valeur si elle existe déjà et l'insérer si elle n'y est pas déjà.

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 
+0

Je ne veux pas remplacer les données, mais mettre à jour les données de sorte que j'ai besoin des données existantes dans la base de données, besoin de faire quelques manipulations, puis mettre à jour ce champ. Comment fait-on ça? – user391301

1

Si vous utilisez l'INSERT ou REPLACE variante de la commande INSERT, vous ne avez pas besoin de vérifier les données existantes, SQLite le fera pour vous, tant qu'il y est une colonne avec une contrainte UNIQUE .

Par exemple:

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

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

Si un id de 5 existe dans la table, cette commande se comportera comme une mise à jour, sinon il sera un insert.

Voir http://www.sqlite.org/lang_conflict.html pour plus de détails.

+0

La colonne n'a pas besoin d'être spécifiée comme UNIQUE, cela fonctionne également avec une clé primaire. – MPelletier

+0

Sauf s'il s'agit d'une clé primaire INTEGER, une clé primaire dans sqlite crée un index unique de toute façon, voir http://www.sqlite.org/lang_createtable.html. – SirDarius

+0

Je ne veux pas remplacer les données, mais mettre à jour les données de sorte que j'ai besoin des données existantes dans la base de données, besoin de faire quelques manipulations, puis mettre à jour ce champ. Comment fait-on ça? – user391301

Questions connexes