开发者

SQLite Changes Not Saved

开发者 https://www.devze.com 2023-03-27 03:50 出处:网络
I\'m using SQLite in iOS 4 on an iPhone, but the changes made by my update statements aren\'t saved. At first thought perhaps quitting the app might be deleting the database somehow, but they\'re not

I'm using SQLite in iOS 4 on an iPhone, but the changes made by my update statements aren't saved. At first thought perhaps quitting the app might be deleting the database somehow, but they're not even persisted during the same session. The code to initialize my database is (using FMDB):

-(SQLiteDal*) init {
    pool = [[NSAutoreleasePool alloc] init];

    self = [super init];
    if(self !=  nil){
        // Setup some globals
        NSString *databaseName = [self getDbPath];
        NSLog([NSString stringWithFormat:@"db path: %@", databaseName]);
        db = (FMDatabase *)[FMDatabase databaseWithPath:databaseName];
        if (![db open]) {
            NSLog(@"Could not open db.");
            [pool release];
            return 0;
        }
    }
    //[self checkAndCreateDatabase];
    return self;
}

#pragma开发者_Python百科 mark DB Maintenance
-(NSString *)getDbPath {
    NSString *databaseName = @"myapp.db";

    // Get the path to the documents directory and append the databaseName
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    databaseName = [documentsDir stringByAppendingPathComponent:databaseName];
    return databaseName;    
}

Both of these methods are called to create the database, then to insert to a table I call:

            [db executeQuery:@"INSERT INTO MyTable (Name, Description, Area, Price, ID) VALUES (?,?,?,?,?)", 
             f.Name,
             f.description,
             f.area,
             f.price,
             f.id];

The problem is, when I come to read from MyTable using the statement below, I never get anything back:

    FMResultSet *rs = [db executeQuery:@"SELECT * FROM MyTable WHERE ID = ?", id];
    while ([rs next]) {
        //.. this is never called

As far as I can see I'm not missing anything out, and the DB seems to be in a writable location.


When inserting you need to call executeUpdate not executeQuery. Also you should call beginTransaction and then commit, like this:

[_dbPointer beginTransaction];
BOOL isInserted = [_dbPointer executeUpdate:[NSString stringWithFormat:@"INSERT INTO  MyTable (Name, Description, Area, Price, ID) VALUES(?,?,?,?,?);", f.Name,
         f.description,
         f.area,
         f.price,
         f.id]];
[_dbPointer commit];
0

精彩评论

暂无评论...
验证码 换一张
取 消