为什么我的SELECT语句一直返回0.0000?

时间:2015-08-17 15:42:53

标签: ios select sqlite

好的,我的SQLite3 SELECT语句遇到了很多问题。我的应用程序将GPS坐标存储在我的表中作为双倍。然后它以与double相同的方式检索它们。我的问题是,每次我尝试检索它们时,它返回0.000000作为我的纬度/经度值。

我知道SELECT语句是有效的,因为我在SQLiteBrowser中测试它,我知道数据库就在那里,因为我在我的模拟器文档中找到它,并再次使用SQLiteBrowser打开它。

如果有人能告诉我它为什么返回0.000000而不是37.337434(表中的实际值)那么我会很感激帮助!

-(double)getLatitudeBysourceMonitor:(NSString *)asourceMonitor andpositionNo:(NSNumber *)apositionNo {
double latitude;
NSLog(@"sourcemonitor:%@ positionno:%@",asourceMonitor, apositionNo);
// Open the database from the users filessytem
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"GPS.db"];
if (sqlite3_open([databasePath UTF8String], &databaseHandle) == SQLITE_OK)
    NSLog(@"Database opened properly");
{
    // Setup the SQL Statement and compile it for faster access
    NSString *sqlStatement = [NSString stringWithFormat:@"SELECT latitude FROM GPSJob;"];
    NSLog(@"Searching for values %@ and %d", asourceMonitor, [apositionNo intValue]);
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(databaseHandle, [sqlStatement UTF8String], -1, &statement, NULL) == SQLITE_OK) {
        NSLog(@"Statement prepared");
        while(sqlite3_step(statement) == SQLITE_ROW) 
        {
            // Need to get data from database...
            latitude = sqlite3_column_double(statement, 3); 
            NSLog(@"%f", sqlite3_column_double(statement, 3));
        }
    }
    // Release the compiled statement from memory
    sqlite3_finalize(statement);
}
        NSLog(@"Reading latitude as: %f", latitude);
        return latitude;
}

1 个答案:

答案 0 :(得分:2)

您对sqlite3_column_double的来电不正确。第二个参数需要是查询返回的列列表的索引。您只查询1列,因此索引必须为0

latitude = sqlite3_column_double(statement, 0);
NSLog(@"latitude = %f", latitude);

其他一些问题。如果您确实准备了声明,则只调用sqlite3_finalize。如果打开数据库,请不要忘记关闭数据库。如果sqlite3_errmsgsqlite3_open失败,请使用sqlite3_prepapre_v2来记录错误。