2012-04-07 17 views
2

Ich habe ein sehr nerviges Problem mit meiner App. Lassen Sie uns eine SQLite3-Datenbank und eine Datetime-Spalte in einer Tabelle namens "täglich" haben.NSDate und SQLite3

- (BOOL)eatQuantity:(NSNumber *)quantity date:(NSDate *)date 
{ 
    User *usr = [User loadCurrentUser]; 

    BOOL ret; 
    sqlite3 *db; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSString *strDate = [dateFormatter stringFromDate:date]; 
    [dateFormatter release]; 

    NSString *query = [NSString stringWithFormat:@"INSERT INTO daily (id_user, id_food, quantity, date) VALUES (%d, %d, %f, '%@')", usr.idPk.intValue, self.idPk.intValue, quantity.floatValue, strDate]; 
    NSLog(@"Query: %@", query); 

Wenn ich diese Methode aufrufen, ein NSDate Objekt aus einem UIDatePicker vorbei, einige Benutzer mit NSDate ein seltsames Verhalten konfrontiert, melden sie dies auf ihre Konsole:

Abfrage: INSERT INTO täglich (ID_USER, id_food , Menge, Datum) WERTE (1, 1010, 130.000000, '2011-12-21 01:20:09 m.')

Aber die sqlite3 kann ein Datum nicht speichern ist ein solches Format wie das mit der Endung "m." Zeichenfolge. Und Benutzer können aufgrund des Nulldatums in der WHERE-Klausel keine Datensätze anzeigen.

Also wo das "m." kommt von? Was heißt das? Wie kann ich dieses Problem beheben?

Antwort

3

Verwenden Sie nicht NSDateFormatter wird es Ihre App massiv verlangsamen.

Sie sollten einen Unix-Zeitstempel (1970) verwenden. Gefallen Sie diesen sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

retrieving:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase]; 
+0

+1 Ich bin mir nicht sicher, wo der 'm.' herkommt, aber das wäre wahrscheinlich besser. Alternativ können Sie das Gebietsschema des NSDateFormatter explizit festlegen, um zu gewährleisten, dass es unabhängig vom aktuellen Gebietsschema des Benutzers dieselbe Stilzeichenfolge generiert. –

+0

Ich muss NSDateFormatter verwenden, da ich Daten im Datumsformat von SQL speichern kann. Ich kann das Design meiner Datenbank momentan nicht ändern. Ich versuche es mit dem Gebietsschema von nsdateformatter. Ich werde Sie wissen lassen, ob es funktioniert! – Progeny