Reputation: 505
I am new on iphone programming.. I keep getting the error and I have no idea how to change the permission for SQLite
Error while updating. attempt to write a readonly database
and the following is my coding
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"card" ofType:@"sqlite"];
sqlite3_stmt *statement;if(sqlite3_open([filePath UTF8String], &db) == SQLITE_OK)
{
const char *query_stmt = "UPDATE card SET isActivate =?";
if(sqlite3_prepare_v2(db, query_stmt, -1, &statement, NULL) != SQLITE_OK)
{
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(db));
}
}
sqlite3_bind_int(statement, 1, 1);
if(SQLITE_DONE != sqlite3_step(statement))
{
NSLog(@"Error while updating. %s", sqlite3_errmsg(db));
}sqlite3_finalize(statement);
sqlite3_close(db);
Hope someone could help me because this really makes me feel frustrated..
Upvotes: 0
Views: 1584
Reputation: 4546
You need to copy your sql file to your cache directory in order to use it correctly.
Here's some of my code:
NSString *sqlFile = @"database.sql";
NSArray *cachePath= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDir = [cachePathobjectAtIndex:0];
databasePath = [cacheDirstringByAppendingPathComponent:sqlFile];
NSFileManager *fileManager = [NSFileManager defaultManager];
// Copy the database sql file from the resourcepath to the documentpath
if (![fileManager fileExistsAtPath:databasePath]) {
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:sqlFile];
NSError *error;
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:&error];
if (error != nil) {
NSLog(@"[Database:Error] %@", error);
}
}
Upvotes: 1