Я создал таблицу в 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;
}