Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS sqlite blob写入失败,错误为';未知错误';_Ios_Sqlite_Blob - Fatal编程技术网

iOS sqlite blob写入失败,错误为';未知错误';

iOS sqlite blob写入失败,错误为';未知错误';,ios,sqlite,blob,Ios,Sqlite,Blob,我有一个基于SQLite的应用程序,可以在Windows、Android和Java上正常运行。我正在尝试将其移植到iOS:设备正在运行iOS 9.3.1 除了blob写入之外,其他一切都可以工作,blob写入在sqlite_步骤调用中失败,并出现“未知错误”。代码基于 这是低级SQLite接口的精简版本:查询来自上一级 NSLog (@"Preparing query {%s}", query); rc = sqlite3_prepare_v2 (hdb, query, -1, &stm

我有一个基于SQLite的应用程序,可以在Windows、Android和Java上正常运行。我正在尝试将其移植到iOS:设备正在运行iOS 9.3.1

除了blob写入之外,其他一切都可以工作,blob写入在sqlite_步骤调用中失败,并出现“未知错误”。代码基于

这是低级SQLite接口的精简版本:查询来自上一级

NSLog (@"Preparing query {%s}", query);
rc = sqlite3_prepare_v2 (hdb, query, -1, &stmt, &tail);
if (rc == SQLITE_OK) {
   NSLog (@"Binding blob: size= %d", (int)[blob length]);
   rc = sqlite3_bind_blob (stmt, 1, [blob bytes], (int) [blob length], SQLITE_STATIC);
   if (rc == SQLITE_OK) {
      rc = sqlite3_step (stmt);
      if (rc != SQLITE_OK)
        [self sql_error: @"sqlDo" line: __LINE__];
   }
   if (sqlite3_finalize (stmt) != SQLITE_OK)
     [self sql_error: @"sqlEndQuery" line: __LINE__];

 }
这是NSLog输出:

Preparing query {INSERT OR REPLACE INTO xxx VALUES (18356, '', ?)}
Binding blob: size= 5388
SQL error at line 157 in sqlDo: query:{INSERT OR REPLACE INTO xxx VALUES (18356, '', ?)} message:{unknown error}

执行
INSERT
语句的
sqlite3\u步骤后,结果是
SQLITE\u DONE
,而不是
SQLITE\u OK

所以,你想要:

rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE)
    [self sql_error: @"sqlDo" line: __LINE__];

显示实际查询而不是“xxx”。@rmaddy:这是实际查询,除了出于保密原因将表名替换为xxx之外。是否在表名后列出三个列名<代码>。。。转换为FOO(Col1、Col2、Col3)值…
。我正在编写所有列,因此列名是可选的。表的结构如下:创建表[xxx]([field1]整数主键,[field2]文本,[field3]BLOB)@罗布,它仍然会破裂,但会以更微妙的方式破裂。我宁愿让它在测试时崩溃并烧掉,也不愿冒着运输一个正在写入缺少字段的记录的生产系统的风险。