2014-02-08 110 views
1

幫助,無法使用SQite中的更新。執行查詢,但xCode iOS SQLite無法正常工作

const char *dbPath=[databasePath UTF8String]; 

if (sqlite3_open(dbPath, &contactDB)==SQLITE_OK) { 

    NSLog(@"database Opened"); 

    const char* updateQuery="update poi set test=\"111\""; 

    sqlite3_stmt *stmt; 

    if (sqlite3_prepare_v2(contactDB, updateQuery, -1, &stmt, NULL)==SQLITE_OK) { 

     NSLog(@"Query Executed"); 
    } 
} 

sqlite3_close(contactDB); 
+0

你可以記錄錯誤,看看有什麼不對 NSLog(@「error =%s」,sqlite3_errmsg(db)); – Gago

+0

錯誤=不是錯誤 – Andry

+0

@Andry:檢查我的答案,你需要執行它。 –

回答

0

你做了細微的錯誤.... 寫烏爾東西在下面的模板,你錯過即

sqlite3_step(statement); 

這裏發生的事情,你只是準備語句,而不是執行它..

sqlite3_stmt *statement; 
if(sqlite3_open(dbpath, &database_object) == SQLITE_OK) 
{ 
    NSString *sql = [NSString stringWithFormat:@"update table_name set column_name = \"%@\"", Your_value]; 
    const char *sql_stmt = [sql UTF8String]; 
    if(sqlite3_prepare_v2(database_object , sql_stmt, -1, &statement, NULL) != SQLITE_OK) 
     NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(database_object)); 
    if(SQLITE_DONE != sqlite3_step(statement)) 
     NSLog(@"Error while updating. '%s'", sqlite3_errmsg(database_object)); 
    sqlite3_finalize(statement); 
} 

主要執行的語句讓這些變化你的代碼和嘗試,我認爲它會工作...

+0

你錯過了寫在代碼sqlite3_step聲明您在NSLog的書面「執行查詢」,所以它顯示執行查詢,你看起來它的工作,但實際上你沒有執行聲明..寫入sqlite3_step語句,你可以使用我給出的模板,它會工作........ :) –

0

您還沒有執行查詢所做的更改不會發生:

sqlite3_prepare_v2 - 只需準備不執行(影響),您需要執行它

嘗試了這一點:

const char *dbPath=[databasePath UTF8String]; 

if (sqlite3_open(dbPath, &contactDB)==SQLITE_OK) { 

    NSLog(@"database Opened"); 

    const char* updateQuery="update poi set test=\"111\""; 

    sqlite3_stmt *stmt; 

    if (sqlite3_prepare_v2(contactDB, updateQuery, -1, &stmt, NULL)==SQLITE_OK) { 

     NSLog(@"Query Prepared to execute"); 
    } 
    if(sqlite3_step(stmt) != SQLITE_DONE){ 
     NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database)); 
    }else 
     NSLog(@"Executed"); 

    sqlite3_close(contactDB); 
    } 
+0

not working :(只記錄數據庫打開,不執行查詢 – Andry

+0

sqlite3_prepare_v2(database,updateQuery, -1,&stmt,NULL); if(sqlite3_step(statement)== SQLITE_DONE){ NSLog(@「Excuted」 ); }其他{ 的NSLog(@「錯誤」); } –

+0

檢查編輯的一個 –