在iPhone中使用SQLite的新手。我使用谷歌并获得了一些关于SQLite for iPhone的信息。我已从here下载了示例源代码。我已经添加了代码来创建如下表格
database = [FMDatabase databaseWithPath:path];
[database open];
[database executeUpdate:@"create table test(name text, message text)"];
我使用下面的代码在表格中插入值:
NSString *nameStr = nameText.text;
NSString *messageStr = ageText.text;
NSString *executeQuery = [NSString stringWithFormat:@"insert into test values ('%@', '%@')",nameStr, messageStr];
NSLog(@"Execute Query : %@", executeQuery);
//[database executeUpdate:executeQuery];
[database executeUpdate:@"insert into test(name, message) values(?,?)", nameStr,messageStr,nil];
但是,应用程序在行[database executeUpdate:@"insert into test(name, message) values(?,?)", nameStr,messageStr,nil];
中崩溃我无法得到崩溃的确切原因。
如果我们在iPhone中使用FMDatabase是安全的,它更适合iPhone应用程序?有人可以帮忙解决这些问题吗?提前谢谢。
答案 0 :(得分:1)
有关使用FMDB和使用stringWithFormat的正确方法的文档:不是吗: https://github.com/ccgus/fmdb(搜索“不应该这样做”)。
相反,你想做这样的事情:
database = [FMDatabase databaseWithPath:path];
[database open]; // FIXME check the return value
[database executeUpdate:@"create table test(name text, message text)"]; // FIXME check for an error
// since we're only performing a single update, there's no need for a transaction
[executeUpdate:@"INSERT INTO test (name, message) VALUES (?, ?)", @"Yuva", @"Hi there"];
-gus(编写FMDB的人)
答案 1 :(得分:0)
使用此代码
database = [FMDatabase databaseWithPath:path];
[database open];
[database executeUpdate:@"create table test(name text, message text)"];
[database beginTransaction];
NSString *executeQuery = [NSString stringWithFormat:@"INSERT INTO test (name, message) VALUES (\"%@\", \"%@\")",@"Yuva", @"Hi there",nil];
NSLog(@"Execute Query : %@", executeQuery);
[database executeUpdate:executeQuery];
[database commit];