0
請找到下面的函數,它第一次正常工作。第一次正常工作,下次遇到數據庫鎖定問題
我的意思是,當我第一次添加一個文本時,然後當我嘗試再次添加一個新文本時,它會給我像「DB已鎖定」。
我不知道它是如何工作的第一次不再?
請讓我知道我的代碼中有什麼問題。
//==================================================================
- (BOOL) addNewSimpleTemplates:(NSString*)dbPath:(NSString*)title{
//==================================================================
BOOL returnVal = NO;
NSString *maxValuePosition;
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
NSString *selectSQL = [NSString stringWithFormat:@"select MAX(pr.position) FROM phrase_reference pr inner join storyboard_main_categories smc on smc.id = pr.main_category_id where smc.category_name = %@", @"'Simple Templates'"];
const char *sql = [selectSQL UTF8String];
sqlite3_stmt *selectStmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) == SQLITE_OK){
while(sqlite3_step(selectStmt) == SQLITE_ROW)
{
//
char *localityChars = (char*)sqlite3_column_text(selectStmt, 0);
if (localityChars == NULL)
maxValuePosition = nil;
else
maxValuePosition = [NSString stringWithUTF8String: localityChars];
// increment the postion value
int postion = [maxValuePosition intValue] + 1;
NSLog(@"%d look here %@ gtitle", postion , title);
selectStmt = nil;
//saving a new simple phrase is started here
sql = "insert into storyboard_phrases(phrase) Values(?)";
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) == SQLITE_OK){
sqlite3_bind_text(selectStmt, 1, [title UTF8String], -1, SQLITE_TRANSIENT);
}
if(sqlite3_step(selectStmt) != SQLITE_DONE) {
NSLog(@"Error: %s just here itself", sqlite3_errmsg(database));
} else {
NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database));
///
int phrase_id = sqlite3_last_insert_rowid(database);
int sub_category_id = 0;
selectStmt = nil;
NSString *selectSQL = [NSString stringWithFormat:@"select id from storyboard_main_categories where category_name = %@", @"'Simple Templates'"];
sql = [selectSQL UTF8String];
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) == SQLITE_OK)
{
while(sqlite3_step(selectStmt) == SQLITE_ROW)
{
char *localityChars = (char*)sqlite3_column_text(selectStmt, 0);
NSString* main_category_id = [NSString stringWithUTF8String: localityChars];
sql = "insert into phrase_reference (phrase_id, sub_category_id,main_category_id, position) Values(?,?,?,?)";
if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) == SQLITE_OK){
sqlite3_bind_int(selectStmt, 1, phrase_id);
sqlite3_bind_int(selectStmt, 2, sub_category_id);
sqlite3_bind_int(selectStmt, 3, [main_category_id intValue]);
sqlite3_bind_int(selectStmt, 4, postion);
}
if(sqlite3_step(selectStmt) != SQLITE_DONE) {
NSLog(@"Error: %s", sqlite3_errmsg(database));
}else {
NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database));
returnVal = YES;
}
}
}
sqlite3_finalize(selectStmt);
selectStmt = nil;
/////
}
}
}
sqlite3_finalize(selectStmt);
}
NSLog(@"sdsdfsdsd closed");
sqlite3_close(database);
return returnVal;
}
請查看本[鏈接] [1]。 [1]:http://stackoverflow.com/questions/9323823/sqlite-finalise-and-db-locking-issue/9340115#9340115 – Kartik 2012-02-27 11:29:00