I have the following code:
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
// Setup the SQL Statement and compile it for faster access
const char *sqlStatement = "select ZWAYPOINT_X, ZWAYPOINT_Y from ZWAYPOINT where ZMAP_ID %@", mapID;
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
{
// Loop through the results and add them to the Route Name array
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
// Read the data from the result row
if((char*)sqlite3_column_text(compiledStatement, 0) != NULL)
{
NSString *xCoordinate = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 0)];
NSString *yCoordinate = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 1)];
NSLog(@"xCoordinate: %@", xCoordinate);
NSLog(@"yCoordinate: %@", yCoordinate);
CLLocationCoordinate2D coordinate = {xCoordinate, yCoordinate};
MapPin *pin = [[MapPin alloc]initWithCoordinates:coordinate
placeName:@"Keenan Stadium"
description:@"Tar Heel Football"];
[self.mapView addAnnotation:pin];
[pin release];
}
}
}
else
{
NSLog(@"Error: failed to select details from database with message '%s'.", sqlite3_errmsg(database));
}
I have a few questions:
- in my SQL statement how do I include the variable mapID as part of the SQL statement
-
the line
CLLocationCoordinate2D coordinate = {xCoordinate, yCoordinate};
gives me the following warning “Incompatible types in initialization”
Thanks
You should use a parameterized statement and bind values, like this:
(Note that when binding parameters, you start at 1, but when reading columns from result rows, you start at 0…). I’m assuming your mapID is an NSString since you tried to stick it in your query using %@. If it’s something else, you’ll have to use a different bind function and obviously skip the
UTF8String.