Когда я пытаюсь использовать SQLite на iOS, INSERT и UPDATE не работают - PullRequest
0 голосов
/ 23 мая 2011

Я создал таблицу в user.db, этот файл находится в папке моего проекта xcode.

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

Затем, в файле делегата приложения .m, я вставляю две строки, затем запрашиваю select * from user и распечатайте его.

Тем не менее, используйте оператор и sqlite3_exec, вставки не выполняются и ошибок вообще нет.user.db имеет 3 строки, которые я вставил из командной строки sqlite.Когда я запускаю это приложение, оно печатает 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 Ответ

1 голос
/ 23 мая 2011

Вы не можете обновлять базы данных, хранящиеся в ресурсах приложения. Попробуйте скопировать базу данных в папку «Документ» или «Библиотека» приложения, а затем обновить базу данных там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...