Skip to main content

Works fine for the first time, next time getting DB locked issue



Please find the below function.it works fine for the first time.





I mean , when i add a text it works for the first time , then when i try to add a new text again , it give me like "DB is locked".





I am not sure how it works for the first not again?





Please let me know what is the problem in my code.







//==================================================================

- ( 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;



}




Comments

  1. I am not going deep within your code but make sure that -

    Dont forget to finalize the statements before close the database.
    And do reset after every execution of the sqlite3 statement


    You are not using reset statement any where.. Try using reset statement..

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.