【发布时间】:2016-07-28 16:01:45
【问题描述】:
我有一个基于 SQLite 的应用程序,可以在 Windows、Android 和 Java 上正常运行。我正在尝试将其移植到 iOS:设备运行的是 iOS 9.3.1。
除了 blob 写入之外,其他一切都有效,在 sqlite_step 调用中失败并出现“未知错误”。代码基于this SE post。
这是低级 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}
【问题讨论】:
-
显示实际查询而不是“xxx”。
-
@rmaddy:那是实际的查询,除了出于保密原因将表名替换为 xxx 之外。
-
你在表名后面列出三个列名吗?
... INTO FOO (Col1, Col2, Col3) VALUES .... -
我正在写所有的列,所以列名是可选的。这是表的结构: CREATE TABLE [xxx] ( [field1] INTEGER PRIMARY KEY, [field2] TEXT, [field3] BLOB);
-
@Rob,它仍然会中断,但会以一种更微妙的方式。我宁愿在测试时让它崩溃和烧毁,也不愿冒险运送一个正在写入缺少字段的记录的生产系统。