如何在iPhone中使用SQLite?

时间:2012-06-29 10:56:02

标签: iphone ios sqlite fmdb

在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应用程序?有人可以帮忙解决这些问题吗?提前谢谢。

2 个答案:

答案 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];