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

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

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

接下来,在应用程序.m文件中,插入两行,然后select * from user查询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; } 

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