0

我有一个简单的程序来更新表的记录

该表是“人”,有“姓名”和“年龄”两列;插入了一些记录,如下:

name age
tom 20
andy 30
han 25

现在我正在编写一个程序来更新表中的一行:

    NSString *database=[[NSBundle mainBundle] pathForResource:@"mytable" ofType:@"sqlite"];
    sqlite3_open([database UTF8String],&contactDB);
    NSString *text=@"andy";
    NSString *query=[NSString stringWithFormat:@"UPDATE person SET age=%d WHERE name='%@'",30,text];
    sqlite3_stmt *statement;
    sqlite3_prepare_v2(contactDB,[query UTF8String],-1,&statement,NULL);
    sqlite3_finalize(statement);
    sqlite3_close(contactDB);

程序运行良好,但数据库没有更新(我正在使用 SQLite Manager 浏览数据库)

当我尝试从数据库中读取时,它运行良好:

NSString *database=[[NSBundle mainBundle] pathForResource:@"mytable" ofType:@"sqlite"];
    sqlite3_open([database UTF8String],&contactDB);
    NSString *query1=[NSString stringWithFormat:@"SELECT * FROM person WHERE age=%d;",30];
    sqlite3_stmt *statement;
    sqlite3_prepare_v2(contactDB,[query1 UTF8String],-1,&statement,NULL);
    sqlite3_step(statement);    
    NSString *result=[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
    label.text=result;
    sqlite3_finalize(statement);
    sqlite3_close(contactDB);
4

5 回答 5

2
 -(void)updateSetting:(NSArray *)arr
  {    
 if(sqlite3_open([databasePath UTF8String],&myDatabase)==SQLITE_OK)
  {
 sqlite3_stmt *compiledStmt;

  NSString *sqlStmt=[NSString stringWithFormat:@"UPDATE setting SET    flow='%@',formate='%@'  WHERE primaryKey=%i;",[arr objectAtIndex:0],[arr objectAtIndex:1],1];
  if(sqlite3_prepare_v2(myDatabase, [sqlStmt UTF8String],-1,&compiledStmt, NULL)==SQLITE_OK)    
  {
  NSLog(@"Successful update");
  }
sqlite3_step(compiledStmt);
sqlite3_close(myDatabase);  
  }

  }
于 2012-08-24T07:17:41.900 回答
1

我已经面临这个问题。这背后的问题是您将查询作为字符串格式传递,因此您必须;在查询语句的末尾使用。

NSString *query=[NSString stringWithFormat:@"UPDATE questionbank SET age=%d WHERE name='%@';",30,text];
于 2012-07-10T04:08:36.153 回答
1

在执行您的sqlite3_step方法之前,请进行如下检查。

const char      *sqlQuery           = "UPDATE SETTINGS SET someFlag = 0";
sqlite3_stmt    *insertStatement    = nil;
int              success            = 0;
if(sqlite3_prepare_v2(sqliteDatabase, sqlQuery, -1, &insertStatement, NULL) == SQLITE_OK)
{
    success = sqlite3_step(insertStatement);

    if(insertStatement)
    {
        sqlite3_finalize(insertStatement);
    }

    if(success == SQLITE_ERROR)
    {
        return NO;
    }
    return YES;
}
return NO;

这样您就可以弄清楚问题出在哪里。

于 2012-07-10T04:27:19.100 回答
0

您需要检查您是否可以访问和打开数据库。只需将您的更新段放在这样的 if 语句中:if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK).

也尝试NSLog(@"%s", sqlite3_errmsg(database));在您准备好后添加,看看是否有任何错误。

于 2012-07-10T04:03:26.710 回答
0

这个问题的答案是主包中的数据库是只读的

我无法将数据插入到 XCode 上的 sqlite3 文件中

于 2012-07-11T15:24:27.547 回答