Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone SQLite3数据库未通过NSLog在控制台上显示条目(将数据保存到DB works)_Iphone_Objective C_Ios_Sqlite_Console - Fatal编程技术网

Iphone SQLite3数据库未通过NSLog在控制台上显示条目(将数据保存到DB works)

Iphone SQLite3数据库未通过NSLog在控制台上显示条目(将数据保存到DB works),iphone,objective-c,ios,sqlite,console,Iphone,Objective C,Ios,Sqlite,Console,正在开发一个简单的时间跟踪器应用程序。启动计时器,等待特定时间,停止时钟,并将花费的分钟数保存到SQLite3数据库。一切都按预期进行,当我点击save(保存)时,我得到一个确认,即记录已保存,但我无法获得控制台上显示的已保存条目。如下面的屏幕截图所示,我有一个show按钮,它应该会在控制台中显示我保存的所有条目,包括时间戳,但当我点击按钮时,什么都不会发生 我认为问题与搜索查询有关,但我不知道我们出了什么问题 据我所知,该查询正在查找时间戳(第0列)和花费的分钟数(第1列),但不起作用,请提供

正在开发一个简单的时间跟踪器应用程序。启动计时器,等待特定时间,停止时钟,并将花费的分钟数保存到SQLite3数据库。一切都按预期进行,当我点击save(保存)时,我得到一个确认,即记录已保存,但我无法获得控制台上显示的已保存条目。如下面的屏幕截图所示,我有一个
show按钮
,它应该会在控制台中显示我保存的所有条目,包括时间戳,但当我点击按钮时,什么都不会发生

我认为问题与搜索查询有关,但我不知道我们出了什么问题

据我所知,该查询正在查找时间戳(第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);
        }
    }
}

您的查询是否返回了任何行?使用浏览器打开sqlite数据库(http://sqlitebrowser.sourceforge.net/)并检查数据是否已实际保存

然后在浏览器中重新运行sql以测试查询,最后在
-(iAction)showButton:(id)发送方
和单步执行

Put
NSLog(@“错误”。%s',sqlite3_errmsg(数据库))在每个数据库操作完成后。(即:之后,sqlite3\u步骤,sqlite3\u准备等)。当您从Library/ApplicationSupport…获取由模拟器创建的数据库时,您可以使用终端打开该数据库并查看内容。或者使用mozilla的SQLite管理器插件,您可以打开数据库并以图形方式查看内容

我的一个朋友刚刚意识到我犯了一个大错误,我完全忘了创建我试图在这里读出的“TIMESTAMP”列。如果您查看这一行:
“如果不存在,则创建表计时(ID INTEGER主键自动递增,TIME INTEGER)”您可以看到我没有创建时间戳列。最后但并非最不重要的是,时间戳是SQL中不允许使用的受保护关键字。为了保存时间戳,我刚刚创建并重命名了列,现在它开始工作了。谢谢你的帮助

你确定showButton被呼叫了吗?将NSLog(@“in showButton”)放在其开头以确保。是,将调用showButton。在开头放一个NSLog。控制台输出:2012-04-01 09:54:19.982 RangeManager[49985:f803]显示按钮点击此[链接][1][1]:我的iPhone模拟器SQLite3数据库存储在哪里?找不到以下文件夹:/User/Library/Application Support/iPhone Simulator/4.2/Applications/GUID/Documents>我拥有的是:/User/Library/Application Support,但没有名为iPhone Simulator的子文件夹。最终找到了该文件夹。必须首先通过终端删除隐藏标志:chflags nohidden/users/[username]/library能够使用SQL浏览器验证应用程序是否成功保存数据。当我在IBAction showButton上设置断点时,我没有看到任何奇怪的行为,但我的查询中仍然没有列出任何行。控制台上甚至没有显示while中的附加NSLog。当我在while函数前放置NSLog时,我看到一个输出。使用sqlite浏览器在数据库上运行查询“选择时间戳,计时时间”,它是否返回结果?奇怪的是,当我运行:选择时间戳,计时时间>我得到:没有这样的列:时间戳。。。当我运行时:选择TIME FROM TIMINGS>I get my saved records List(无时间戳)NSLog(@“Error.”%s',sqlite3_errmsg(database));这是非常有用的。谢谢