我正在开发一款iPad应用程序,并使用sqlite句子(select,update,insert,delete)。
我在开头打开数据库(sqlite3_open),并在每个语句结束时关闭(sqlite3_close)。但有时我会收到“数据库已锁定”的消息。
我不知道如何解决这个问题。
谢谢,很抱歉这些信息不多。
我正在开发一款iPad应用程序,并使用sqlite句子(select,update,insert,delete)。
我在开头打开数据库(sqlite3_open),并在每个语句结束时关闭(sqlite3_close)。但有时我会收到“数据库已锁定”的消息。
我不知道如何解决这个问题。
谢谢,很抱歉这些信息不多。
- (void) generalMethodThatUsesDatabses
{
if(databaseIsUsed)
{
[self performSelector:@selector(generalMethodThatUsesDatabses) withObject:nil afterDelay:5];
return;
}
databaseIsUsed = TRUE; //global bool variable
//your code here
databaseIsUsed = FALSE;
}
@synchronized
域。 - Krumelursqlite3_finalize(statement);
sqlite3_close(database);
NSArray* ScoreBoard::getAllScores()
{
ScoreBoard::ensureExistingTable();
//Stack allocated
SqliteWrapper sqlite("Scores.sqlite");
NSArray* result = sqlite.RunQuery("SELECT * FROM Scores ORDER BY ID DESC");
return result;
//after this, the sqlite destructor is called
}
Objective-C编译器允许您合并C++,这非常好。它可以非常有用。
另外
void SqliteWrapper::Close()
{
sqlite3_close(db);
}
正如Vincent所指出的那样,您必须完成语句。如果您想保持连接开放,请在每个语句后使用finalize。在您丢弃连接时立即关闭连接。
这种方法对我很有效。
它用于三种方法: 1.插入 2.更新 3.删除。
-(NSMutableArray *)resultSet
-(void)insertWithTitle:(NSString *)title Body:(NSString *)body
-(BOOL)updateAtIndex:(int)index Title:(NSString *)title Body:(NSString *)body
NSMutableArray *result = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];
FMResultSet *rs = [db executeQuery:[self SQL:@"SELECT * FROM %@" inTable:TABLE_NAME]];
while ([rs next]) {
Record *tr = [[Record alloc] initWithIndex:[rs intForColumn:@"id"]
Title:[rs stringForColumn:@"title"]
Body:[rs stringForColumn:@"body"]];
[result addObject:tr];
[tr release];
}
[rs close];
2....
return result;
[db executeUpdate:[self SQL:@"INSERT INTO %@ (title, body) VALUES (?,?)" inTable:TABLE_NAME], title, body];
if ([db hadError]) {
NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
删除记录:
BOOL success = YES;
[db executeUpdate:[self SQL:@"DELETE FROM %@ WHERE id = ?" inTable:TABLE_NAME], [NSNumber numberWithInt:index]];
if ([db hadError]) {
NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
success = NO;
}
return success;
}