gpt4 book ai didi

iphone - SQLite 更改未保存

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:34:00 24 4
gpt4 key购买 nike

我在 iPhone 上使用 iOS 4 中的 SQLite,但我的更新语句所做的更改未保存。起初以为退出应用程序可能会以某种方式删除数据库,但它们甚至不会在同一个 session 期间持续存在。初始化我的数据库的代码是(使用 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 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;
}

这两种方法都被调用来创建数据库,然后插入到我调用的表中:

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

问题是,当我使用下面的语句从 MyTable 中读取数据时,我从来没有得到任何回复:

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

据我所知,我没有遗漏任何东西,数据库似乎位于可写位置。

最佳答案

插入时需要调用executeUpdate 而不是executeQuery。您还应该调用 beginTransaction,然后调用 commit,如下所示:

[_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];

关于iphone - SQLite 更改未保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com