0

我是 IOS 开发的新手,所以我正在关注这个

教程

正如本教程中提到的,我使用 SQLITE 命令行创建了我的数据库,创建了我的表,然后通过将数据库添加到 Supporting Files 文件夹将其导入到我的 XCode 4.6 项目中。

我只想用数据填充表,所以我有一个函数,它首先找到我的数据库并将其复制到 Documents 文件夹(如果不存在,已经存在):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Customers.db"];
FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath];

这很好用,因为 writebleDBPath 指向 Customers.db 所在的实际路径(在项目的 Documents 文件夹中)

现在我打开数据库并尝试添加一条新记录:

[db open];
BOOL success =  [db executeUpdate:@"INSERT INTO customers (firstname,lastname) VALUES (?,?);",[patient.firstName UTF8String],[patient.secondName UTF8String], nil];

[db close];

但成功的价值始终是“否”。

我包括用于创建 sqlite 数据库的代码:

CREATE TABLE customers(id integer primary key, firstname varchar(30), lastname varchar(30))

我错过了什么?

4

2 回答 2

1

如果id是主键,也许您也需要设置它。

尝试调用[db lastErrorMessage]以查看问题所在。

于 2013-03-11T23:55:19.783 回答
0

您在教程中遗漏了一个步骤:

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

它从包中复制数据库文件。这假设您创建了数据库及其架构并将其与应用程序一起包含在包中。

于 2013-03-11T23:56:53.093 回答