当我在iOS上尝试SQLite时,INSERT和UPDATE不起作用

时间:2011-05-23 17:01:37

标签: ios sqlite

我在user.db中创建了一个表,此文件位于我的xcode项目文件夹中。

create table user (uid INTEGER PRIMARY KEY ASC AUTOINCREMENT, username, mobile);

接下来,在app delegate .m文件中,我插入两行,然后查询select * from user并打印出来。

但是,使用statement和sqlite3_exec,插入不成功,并且根本没有错误。 user.db我从sqlite命令行插入了3行。当我运行这个应用程序时,它打印5行数据,我插入2行,但是当我在sqlite命令行中查询时,仍然有3行,这两个较新的行没有提交?

我也运行sqlite3_get_autocommit,找出autocommit=1,那么我错过了什么导致这种情况发生?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Override point for customization after application launch.
  [self.window makeKeyAndVisible];

  NSString* file = [[NSBundle mainBundle] pathForResource:@"user" ofType:@"db"];
  sqlite3* database = NULL;
  if(sqlite3_open([file UTF8String], &database) == SQLITE_OK)
  {
    NSLog(@"database open successfully.");
    // stmt

    // int autocommit = sqlite3_get_autocommit(database);

    sqlite3_stmt* stmt;
    static char * sql = "insert into user (username, mobile) values('xxxx', '5555555');commit;";
    int success = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
    if(success != SQLITE_OK)
    {
      NSLog(@"create stmt failed");
    }
    success = sqlite3_step(stmt);
    if(success != SQLITE_OK)
    {
      NSLog(@"insert failed");
    }
    sqlite3_finalize(stmt);

    sqlite3_exec(database, "begin;insert into user (username, mobile) values('yyyy', '666666');commit;", NULL, NULL, 0);

    // insert 
    char *zErrMsg = 0;
    int rc = sqlite3_exec(database, "select * from user", MyCallback, 0, &zErrMsg);
    if(rc != SQLITE_OK)
    {
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
    }
  }
  sqlite3_close(database);
  return YES;
}

1 个答案:

答案 0 :(得分:1)

您无法更新存储在应用资源中的数据库。尝试将数据库复制到应用程序的Document或Library文件夹,然后在那里更新数据库。