Работа над простым приложением TimeTracker.Вы запускаете таймер, ждете определенное время, останавливаете часы и сохраняете потраченные минуты в базу данных SQLite3.Все работает, как и ожидалось, когда я нажимаю на Сохранить, я получаю подтверждение, что запись была сохранена, но я не могу получить сохраненные записи, отображаемые на консоли.Как видно на скриншоте ниже, у меня есть show button
, который должен показать мне все мои сохраненные записи в консоли, включая отметку времени, но ничего не происходит, когда я нажимаю кнопку.
Я думаю, что проблема связана с поисковым запросом.но я не могу понять, в чем дело.
Насколько я понимаю, запрос ищет метку времени (столбец 0) и потраченные минуты (столбец 1), но это не работает, пожалуйста, помогите.
NSLog(@"Timestamp: %s - Timing: %s", sqlite3_column_text(statement, 0), sqlite3_column_text(statement, 1));
База данных SQLite очень проста, я хочу сохранить только одно значение> потраченных минут.Может быть, база данных создана неправильно?
Создание базы данных:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
databasePath = [[NSString alloc]initWithString:[docsDir stringByAppendingPathComponent:@"timings.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath:databasePath] == NO)
{
const char *dbPath = [databasePath UTF8String];
if (sqlite3_open(dbPath, &timings) == SQLITE_OK)
{
char *errormsg;
const char *sql_stmt =
"CREATE TABLE IF NOT EXISTS TIMINGS(ID INTEGER PRIMARY KEY AUTOINCREMENT, TIME INTEGER)";
if (sqlite3_exec(timings, sql_stmt, NULL, NULL, &errormsg) != SQLITE_OK)
{
self.statusLabel.text = @"Failed to create database";
}
sqlite3_close(timings);
}
else
{
self.statusLabel.text = @"Failed to open/create database.";
}
}
}
Показать сохраненные записи на консоли:
-(IBAction)showButton:(id)sender
{
if (sqlite3_open([databasePath UTF8String], &timings) == SQLITE_OK)
{
NSString *queryStatement = [NSString stringWithFormat:@"SELECT TIMESTAMP, TIME FROM TIMINGS"];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(timings, [queryStatement UTF8String], -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW) {
NSLog(@"Timestamp: %s - Timing: %s", sqlite3_column_text(statement, 0), sqlite3_column_text(statement, 1));
}
sqlite3_finalize(statement);
sqlite3_close(timings);
}
}
}
![Screernshot](https://i.stack.imgur.com/osUGD.jpg)