2011-10-18 4 views
0

J'ai une page de connexion où l'utilisateur doit entrer Nom d'utilisateur & mot de passe pour accéder à l'application, pour la première fois l'utilisateur peut entrer un nom d'utilisateur & mot de passe du souhait de l'utilisateur.Utilisation de select & insert query en utilisant sqlite3 db

Premier scénario:

Première fois que je dois insérer les informations de connexion à la DB

Deuxième scénario:

Et la deuxième fois lorsque l'utilisateur se connecte à i besoin pour sélectionner les détails de l'utilisateur de la db au lieu d'insérer une fois de plus.

Les 2 opérations ci-dessus que je fais dans le fonctionnement du bouton de connexion.

S'il vous plaît aidez-moi à la façon d'atteindre le processus

Merci.

Répondre

0

Créez d'abord des UserDetails de classe personnalisée avec NSString userName et userPassword.

Ensuite, vous pouvez essayer quelque chose comme ceci pour lire des données

- (UserDetails *)getUserDetails:(NSString *)userLogin password:(NSString *)userPassword 
{ 
    UserDetails *retVal; 

    sqlite3 *database; 

     NSString *dbPath = @"your_db_path"; 

    if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK){ 

     const char *sql_statement = [[NSString stringWithFormat:@"select * from Users where UserLogin = '%@' and UserPassword = '%@'", userLogin, userPassword] UTF8String]; 

     sqlite3_stmt *compiled_statement;  

     if(sqlite3_prepare_v2(database, sql_statement, -1, &compiled_statement, NULL) == SQLITE_OK){ 

      while(sqlite3_step(compiled_statement) == SQLITE_ROW){ 
       [retVal setUsername:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(compiled_statement, 0)]]; 

       [retVal setPassword:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(compiled_statement, 1)]]; 

      } 

      sqlite3_finalize(compiled_statement); 
      sqlite3_close(database); 

     } 

    } 

    return retVal; 
} 

Et pour insérer des données que vous pouvez utiliser presque le même code mais sans le retour des valeurs, donc méthode retourne vide ou une valeur de contrôle si vous en avez besoin et seulement si vous avez des erreurs dans l'exécution, alors que l'instruction SQL sera quelque chose comme

Insérer dans les utilisateurs (Userlogin, UserPassword) VALUES (« % @ », « % @ »)

+0

mais je veux que les 2 opérations soient faites dans une méthode ou une action? L'option d'insertion de première heure devrait s'exécuter, à partir de la prochaine fois que l'opération de sélection devrait fonctionner. – Santosh

+0

alors vous pouvez ajouter que si la sélection renvoie 0 enregistrements, vous effectuez une requête sql avec l'insertion des mêmes données que de nouveaux enregistrements –

2

Pour ce flux de votre application vous devez créer une table avec 4 champs.

1.id 2.username 3.password 4.flag (valeur par défaut est 0)

puis ajouter quelques valeurs de vidage pour nom d'utilisateur et Mot de passe, sauf le drapeau (pour drapeau = 0). Après cela, vous devez copier ce sqliteDB dans l'application.

Pour la première fois, vous devez sélectionner le mot de passe et le nom d'utilisateur de votre db. puis vérifiez la valeur de l'indicateur, si l'indicateur = 0, puis mettez à jour les valeurs de nom d'utilisateur, mot de passe et indicateur = 1. Dans la deuxième fois, il vérifie à nouveau le champ indicateur et passe à la partie else, où vous devez comparer avec le nom d'utilisateur et mot de passe entré dans le champ de texte. s'il existe, il est un utilisateur valide sinon il n'est pas un utilisateur valide