0

我是在 iPhone 中使用 SQLite 的新手。我使用谷歌并获得了一些关于 iPhone 版 SQLite 的信息。我已经从这里下载了示例源代码。我添加了代码来创建如下表,

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 应用程序?任何人都可以帮助解决这些问题吗?提前致谢。

4

2 回答 2

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 的人)

于 2012-06-29T18:28:46.060 回答
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];
于 2012-06-29T10:57:46.353 回答