我正在开发一个使用 FMDB 与本地 SQLite 数据库对话的 Cocoa 应用程序。我遇到了一个问题,我无法在 DB 上执行任何插入或更新操作。选择查询运行得很好,所以我假设我的数据库连接设置是正确的。
我的代码结构基本上是这样的:
FMDatabase* db=[FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"DBName" ofType:@"sqlite"]];
if(![db open])
{
NSLog(@"Could not open db.");
}
db.traceExecution=YES;
[db beginTransation];
[db ExecuteUpdate:"INSERT INTO test (title) VALUES(?)", [NSNumber numberWithInt]:2],nil];
[db commit];
[db close];
执行过程中没有抛出异常或警告,关于 db.traceExecution 的控制台输出如下:
<FMDatabase: 0x100511fd0> executeUpdate: BEGIN EXCLUSIVE TRANSACTION;
<FMDatabase: 0x100511fd0> executeUpdate: INSERT INTO test (title) VALUES(?);
obj: 2
<FMDatabase: 0x100511fd0> executeUpdate: COMMIT TRANSACTION;
测试数据库只是一个 INT 类型的单列表。
一切看起来都很好,只是 db 文件根本没有更新。这让我很困惑,因为 Select 查询工作得非常好。我检查了数据库的路径,它指向正确的路径。首先我怀疑它是由文件权限引起的,但即使我允许每个人都能够读/写,问题仍然存在。
我被这个问题困扰了好几个小时,找不到合适的解决方案。任何人都可以对此有所了解吗?谢谢!