【问题标题】:Unable to Update sqlite3 Database table in iOS无法在 iOS 中更新 sqlite3 数据库表
【发布时间】:2013-11-23 07:53:03
【问题描述】:

我是 iOS 中 sqlite3 的新手,我正在尝试更新设备表中的现有记录,如下所示我没有更新主键,尽管我正在根据 deviceAppID 是我的 PK 的主键更新记录

这是我正在尝试的代码

      const char *updateStatement ="UPDATE  Device SET deviceGUID=?,testGUID=?,deviceName=?,device=?,deviceOsVersion=?,platform=?,createdDateTime=?,updatedDateTime=?,status=? WHERE deviceAppID=1";

      int success;

      if(sqlite3_prepare_v2(mDatabase, updateStatement, -1, &mStatement, NULL) == SQLITE_OK)
          {
sqlite3_bind_text(mStatement, 2, [device.deviceGUID UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 3, [device.testGUID UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 4, [device.deviceName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 5, [device.device UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 6, [device.deviceOSVersion UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 7, [device.devicePlatform UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 8, [device.createdDateTime UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(mStatement, 9, [device.updatedDateTime UTF8String], -1, SQLITE_TRANSIENT);
 sqlite3_bind_int(mStatement, 10, device.status);

            success = sqlite3_step(mStatement);


            if (success == SQLITE_ERROR) {

                  NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(mDatabase));
            }
          }

      else {

            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(mDatabase));
      }
      sqlite3_finalize(mStatement);

【问题讨论】:

  • 我不确定,但是为什么您的参数编号以 2 开头并上升到 10?这不应该是 0 .. 8 吗?
  • 表格必须在 Documents 文件夹中 - 您可能正在使用应用程序包中的表格:stackoverflow.com/a/15491281/653513。应用程序包中的文件是只读的。
  • 我提到问题本身我没有更新PK。所以我删除了第 1 列。
  • @rokjarc 感谢您的评论架构仅在文档中。

标签: mysql ios sql sqlite ios7


【解决方案1】:

请阅读以下链接(索引不是表中的索引,是STATEMENT中的索引)

read this - found it with google

【讨论】:

  • 谢谢@nabuchodonossor,你能告诉我上面代码的上下文,我把事情搞砸了。
  • 是的。如果您转到提供的链接,您会找到如何使用绑定方法的说明(注意:对于不同的数据类型,有不同的绑定方法(int、date ...)。简而言之:您从索引 0 开始第一个参数,第二个参数的索引 1 等等。退出简单。所有其他 cmets 也可能很重要,例如,您是否允许更新表,等等。
  • 但是为什么插入记录时索引从1开始,请告诉我。
  • 索引与表无关。 index是sql语句中参数的索引。
  • 我再次阅读了文档(来自链接)并找到了信息,该值以 1 开头,一个语句最多 999 个参数。
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
相关资源
最近更新 更多