Enregistrement de la date sur SQLite

-(void)save:(id)sender { sqlite3_stmt *statement; const char *dbpath = [databasePath UTF8Ssortingng]; if (sqlite3_open(dbpath, &expenseDB) == SQLITE_OK) { NSSsortingng *insertSQL = [NSSsortingng ssortingngWithFormat:@"INSERT INTO ADDEXPENSE(date, description, category, amount) VALUES (\"%@\", \"%@\", \"%@\",\"%@\")", fieldOne.text, fieldTwo.text,fieldThree.text , fieldFour.text]; const char *insert_stmt = [insertSQL UTF8Ssortingng]; sqlite3_prepare_v2(expenseDB, insert_stmt, -1, &statement, NULL); if (sqlite3_step(statement) == SQLITE_DONE) { status.text = @"saved" } else { status.text = @"Failed" } sqlite3_finalize(statement); sqlite3_close(expenseDB); } } 

Cette méthode fonctionne bien pour moi. Mais comment l'save en tant que date au lieu de strings? J'ai essayé quelques manières mais n'ai pas fonctionné pour moi. Comme je suis nouveau à coding.someone s'il vous plaît aidez-moi avec un morceau de code uuuuuuuuu C'est le Picker que j'ai utilisé.

 UIDatePicker *picker = (UIDatePicker *)sender; NSDate *dateSelected = [picker date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"dd.MM.yyyy"]; self.fieldOne.text = [dateFormatter ssortingngFromDate:dateSelected]; 

SQLLite n'a pas de type de données de date, vous devez donc l'save sous forme de text ou de nombre. J'utilise personnellement la méthode de text et mon code convertit toutes les dates en text sur insert ou mettre à jour et le convertit sur un select.

donc pour get à partir d'une date que j'utilise

 [self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; NSSsortingng *dateSsortingng = [self.dateFormatter ssortingngFromDate:date]; 

Pour le reconvertir

 [self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; NSDate *theDate = [self.dateFormatter dateFromSsortingng:ds]; 

Je garde la valeur comme date jusqu'au moment où je veux l'afficher.

Votre exemple de code a besoin de reflection car l'un des concepts keys du développement iOS est MVC, ce qui signifie que vous devriez essayer de séparer votre vue de votre model. Idéalement, vous devriez avoir un object dans lequel datatables sont stockées. Votre vue sait comment afficher datatables et votre model sait comment stocker et récupérer datatables.

Il vaut la peine de l'examiner car il rend le code plus facile à maintenir et extensible.

Il serait préférable de créer un champ de type de données double dans la database et d'save la date dans l'horodatage en utilisant [NSDate timeinterversince1970]; cela fera le NSDate à timestamp et vous pouvez l'save dans la database en double formate, plus loin tout en utilisant le type similaire de fonction dans la class NSDate pour convertir l'horodatage en NSDate.

Habituellement, la valeur date est stockée sous forme de string. Mais il existe peu de moyens qui permettent à un développeur de stocker une valeur de date sauf la date.

Voici les references qui vous permettront de connaître la même chose.

  1. Persistant dates à SQLite3 dans une application iPhone

  2. Type DATETIME d'Objective-C et sqlite

Code pour append la date à la table de database sqlite:


 -(void) saveData { sqlite3_stmt *statement = NULL; const char *dbpath = [databasePath UTF8Ssortingng]; sqlite3_reset(statement); if (sqlite3_open(dbpath, &recordsDB) == SQLITE_OK) { NSSsortingng* Date = [NSDate dateWithTimeIntervalSinceNow : sqlite3_column_double(statement, 0)]; NSSsortingng *insertSQL = [NSSsortingng ssortingngWithFormat: @"INSERT INTO RECORDS Date VALUES ( \"%@\")",Date]; NSLog(@"save Data %@",Date); NSLog(@"save Data %@",insertSQL); //to print the values inserted in the database const char *insert_stmt = [insertSQL UTF8Ssortingng]; sqlite3_prepare_v2(recordsDB, insert_stmt, -1, &statement, NULL); if (sqlite3_step(statement) == SQLITE_DONE) { NSLog(@"@database created"); NSLog(@"databasevalue:%@",insertSQL); } else { NSLog(@"@database not created"); } sqlite3_finalize(statement); sqlite3_close(recordsDB); } }