дата вставки fmdb дает "недопустимую дату" - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь использовать fmdb в моем последнем ios-проекте, и пока он работал отлично.Но теперь я пытаюсь сделать вставки с NSDate в качестве параметра, и он в конечном итоге хранится как недопустимая дата в моей базе данных sqlite.Я пробовал несколько решений, но, похоже, ничего не работает.Что я делаю не так?

[database executeUpdate:@"CREATE TABLE IF NOT EXISTS inspection (ID INTEGER PRIMARY KEY, result TEXT, date_of_inspection DATE, restaurant_id INTEGER"];

NSDate *today=[NSDate date];
[database executeUpdate:@"insert into inspection(id,result,date_of_inspection,restaurant_id) values(?,?,?,?)",[inspection valueForKey:@"id"], result, today, [restaurant valueForKey:@"id"],nil];

База данных заполнена, и все работает нормально, кроме * #%!дата ... :) Что не так?

Ответы [ 2 ]

6 голосов
/ 25 марта 2012

SQLite не имеет формата даты , поэтому FMDB ожидает, что поля даты будут храниться как числа с плавающей запятой / действительные числа:

else if ([obj isKindOfClass:[NSDate class]]) {
    sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]);
}

Так что попробуйте создать таблицу с этимформат.

0 голосов
/ 12 февраля 2014

Попробуйте это:

[database executeUpdate:@"CREATE TABLE IF NOT EXISTS inspection(ID INTEGER PRIMARY KEY, result TEXT, date_of_inspection REAL, restaurant_id INTEGER"];

NSDate *today=[NSDate date];
[database executeUpdate:@"insert into inspection(id,result,date_of_inspection,restaurant_id) values(?,?,?,?)",[inspection valueForKey:@"id"], result, [today timeIntervalSince1970], [restaurant valueForKey:@"id"],nil];

SQLite не поддерживает тип данных DATE (http://www.sqlite.org/datatype3.html). Вы должны сохранить его как РЕАЛЬНЫЙ тип данных. timeIntervalSince1970 возвращает тип данных NSTimeInterval, который является двойным ( https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html).

...