【问题标题】:I can not insert data into sqlite3 file on XCode我无法将数据插入到 XCode 上的 sqlite3 文件中
【发布时间】:2012-06-25 14:49:08
【问题描述】:

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

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

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

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); 
        }

【问题讨论】:

    标签: database ios5 sqlite xcode4.2


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我明白了,但我还没有开发者帐户,99 美元,所以我需要对这个数据存储的东西进行具体解释。
    • 存储位置取决于您存储的数据类型。
    【解决方案2】:

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

    这是 Inafziger 提供的链接上的信息:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多