Ajay
Ajay

Reputation: 552

Sqlite database file is getting encrypted or is not a database

I have no idea what was the problem is in my program. When run this select code for fetching data from SQlite in my program, the first time it crashes with this error message:

kill error while killing target (killing anyway):
warning: error on line 2179 of "/SourceCache/gdb/gdb-1510/src/gdb/macosx/macosx-nat-inferior.c" in function "macosx_kill_inferior_safe": (os/kern) failure (0x5x)
quit

Here's my insert code:

-(id)init {
    self = [super init];

    sqlite3 *database;

    NSMutableArray *locations;
    NSString *result = nil;
    NSString *dbPath = [self getWritableDBPath];

    if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {
        NSString *sqlStr = [NSString stringWithFormat:@"select Longitude,Latitude from myLocation"];
        const char *sqlStatement = [sqlStr UTF8String];
        sqlite3_stmt *compiledStatement;

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            locations = [NSMutableArray array];

            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

                double longitude = sqlite3_column_double(compiledStatement, 0);
                double latitude = sqlite3_column_double(compiledStatement, 1);
                NSLog(@"%f , %f",longitude,latitude);
                NSString *coords = [[[NSString alloc] initWithFormat:@"%f,%f\n",longitude,latitude] autorelease];

                [locations addObject:coords];
                NSLog(@"this location :-%@",locations);
                //[coords release];

            }

            result = [locations componentsJoinedByString:@","]; // same as `fake_location`
            NSLog(@"this for resulte data :- %@",result);
            // Get file path here

            NSError *error;
            if ( [result writeToFile:dbPath atomically:YES encoding:NSUTF8StringEncoding error:&error] ) {
                NSLog(@"%@", [error localizedDescription]);
            }
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);


    pointsArray = [[result componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] retain];
    pointsArrayIndex = 0;
    oldLocationsIndex = 0;

    [result release];

    oldLocations = [[NSMutableArray alloc] init];


    return self;
}

The second time I run my application, it shows me that on the console:

Save Error: file is encrypted or is not a database

What do these errors mean, and how do I solve that?

Upvotes: 0

Views: 1260

Answers (2)

jigneshbrahmkhatri
jigneshbrahmkhatri

Reputation: 3637

You need to fire insert query using following:

-(void)insertLocation:(double)latitude withLongitude:(double)longitude
{
sqlite3_stmt *insertStatement = nil;
const char *sql = "insert into UserJourneyLocation(Latitude, Longitude) Values(?,?)";
int returnValue = sqlite3_prepare_v2(database, sql, -1, &insertStatement, NULL);
if(returnValue == SQLITE_OK)
{
    sqlite3_bind_double(insertStatement,1,latitude);
            sqlite3_bind_double(insertStatement,2,longitude);
    if(sqlite3_step(insertStatement)==SQLITE_DONE)
    {
        //Data;
    }
}
sqlite3_finalize(insertStatement);
}

Upvotes: 1

HCharli
HCharli

Reputation: 361

Yes I have.

Go to iphone application document folder

/users/(yourname)/library/application support/iphone simulator/user/application

And remove all Targets.After that Restart your application.

Upvotes: 0

Related Questions