Сохранение даты в SQLite - PullRequest
       5

Сохранение даты в SQLite

1 голос
/ 17 ноября 2011
-(void)save:(id)sender
{
sqlite3_stmt *statement;
const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &expenseDB) == SQLITE_OK)
{

    NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO ADDEXPENSE(date, description, category, amount) VALUES (\"%@\", \"%@\", \"%@\",\"%@\")", fieldOne.text, fieldTwo.text,fieldThree.text , fieldFour.text];

    const char *insert_stmt = [insertSQL UTF8String];

    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);
}
}

Этот метод отлично работает для меня. Но как сохранить его как дату вместо строк?Я попробовал несколько способов, но у меня не получилось.Поскольку я новичок в программировании. Кто-то, пожалуйста, помогите мне с кодом.

Ответы [ 5 ]

5 голосов
/ 26 ноября 2011

Было бы лучше создать поле двойного типа данных в БД и сохранить дату в метке времени, используя [NSDate timeinterversince1970];это сделает NSDate меткой времени, и вы можете сохранить ее в базе данных в двойном формате, а затем использовать аналогичный тип функции в классе NSDate для преобразования метки времени в NSDate.

5 голосов
/ 17 ноября 2011

SQLLite не имеет типа данных даты, поэтому вы должны сохранить его в виде текста или числа.Я лично использую текстовый метод, и мой код преобразует любые даты в текст при вставке или обновлении и преобразует их обратно в выборку.

, чтобы получить дату, которую я использую

[self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString *dateString = [self.dateFormatter stringFromDate:date];

Дляпреобразовать его обратно

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

Я сохраняю значение в качестве даты до момента, когда я хочу его отобразить.

Ваш пример кода нуждается в некотором размышлении, хотя одной из ключевых концепций в разработке для iOS является MVC, что означает, что вы должны попытаться отделить ваш View от вашей Model.В идеале у вас должен быть объект, в котором хранятся данные.Ваше представление знает, как отображать данные, а ваша модель знает, как хранить и извлекать данные.

Стоит рассмотреть, поскольку это делает код более понятным и расширяемым.

0 голосов
/ 11 июля 2013

Код для добавления даты в таблицу базы данных sqlite:


-(void) saveData



{



sqlite3_stmt *statement = NULL;

const char *dbpath = [databasePath UTF8String];
sqlite3_reset(statement);

if (sqlite3_open(dbpath, &recordsDB) == SQLITE_OK)

{



NSString* Date = [NSDate dateWithTimeIntervalSinceNow : sqlite3_column_double(statement, 0)];


    NSString *insertSQL = [NSString stringWithFormat: @"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 UTF8String];

    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);

}
}
0 голосов
/ 17 ноября 2011

Обычно значение даты сохраняется в виде строки. Но есть несколько способов, которые позволяют разработчику сохранять значение даты, кроме даты.

Ниже приведены ссылки, по которым вы узнаете об этом.

  1. Сохраняющиеся даты для SQLite3 в приложении iPhone

  2. Objective-C и тип DATETIME sqlite

0 голосов
/ 17 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...