我在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;
}
答案 0 :(得分:1)
您无法更新存储在应用资源中的数据库。尝试将数据库复制到应用程序的Document或Library文件夹,然后在那里更新数据库。