2014-02-08 79 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

检查编辑的一个 –