我无法将数据插入XCode上的sqlite3文件中

时间:2012-06-23 15:49:45

标签: database ios5 sqlite xcode4.2

我没有找到满足我的答案,我可以将数据插入数据库,我也可以在模拟器上从中选择,但是当我关闭模拟器并再次打开它时,我看不到任何数据。我也在终端上打开它,我没有看到任何数据。 我错过了任何一行还是有任何逻辑错误?

你尝试了什么?对我有什么建议吗?

我在我的代码中插入数据是这样的:

databasePath = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"sqlite3"];
        const char *dbpath = [databasePath UTF8String];
        sqlite3_stmt    *statement;

        if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
        {
            NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO person (id, name, address, photograph, telephone, fax, district) VALUES (\"%i\",\"%@\", \"%@\", \"%@\",\"%@\",\"%@\",\"%@\")", i, Name,Addresses, Image, Telephone,Fax,District];

            const char *query_stmt = [insertSQL UTF8String];

            sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL);

            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                //  NSLog(@"OK");

            } else {
                //  NSLog(@"Problem!!!");

            }
            sqlite3_finalize(statement);
            sqlite3_close(contactDB); 
        }

2 个答案:

答案 0 :(得分:1)

您无法对主数据包中的数据库进行更改,因为它是只读的。

您必须先将其复制到可以写入的位置,例如用户文档或缓存目录。

iOS data storage guidelines指定应保存的位置,具体取决于数据类型。

答案 1 :(得分:1)

我正在寻找相同的答案,因为我也被困住了,我认为其他人的帖子here给出了一个很好的例子。

以下是Inafziger给出的链接信息:

iOS数据存储指南 iCloud包括Backup,它每天通过Wi-Fi自动备份用户的iOS设备。除了应用程序包本身,缓存目录和临时目录之外,还会备份应用程序主目录中的所有内容。还备份购买的音乐,应用程序,书籍,相机胶卷,设备设置,主屏幕和应用程序组织,消息和铃声。由于备份是通过无线方式完成的并存储在iCloud中,因此最好尽量减少为应用程序存储的数据量。大文件会延长执行备份所需的时间,并消耗更多用户可用的iCloud存储空间。

为确保备份尽可能高效,请务必按照以下准则存储应用的数据:

  1. 只有用户生成的文档和其他数据,或者应用程序无法重新创建的数据应存储在/ Documents目录中,并且将由iCloud自动备份。
  2. 可以再次下载或重新生成的数据应存储在/ Library / Caches目录中。您应该放在Caches目录中的文件示例包括数据库缓存文件和可下载内容,例如杂志,报纸和地图应用程序使用的文件。
  3. 仅临时使用的数据应存储在/ tmp目录中。虽然这些文件没有备份到iCloud,但请记住在完成这些文件后删除它们,以免它们继续消耗用户设备上的空间。
  4. 使用“不备份”属性指定应保留在设备上的文件,即使在低存储情况下也是如此。将此属性与可以重新创建的数据一起使用,但即使在低存储情况下也需要保留,以使应用程序正常运行,或者因为客户希望在脱机使用期间可以使用该数据。此属性适用于标记文件,无论它们位于何种目录中,包括Documents目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件确实使用设备上的存储空间,因此您的应用程序负责定期监视和清除这些文件。