SQLite 中的许多例程 C 语言接口 返回数值结果代码,指示成功或失败。如果发生失败,则提供有关失败原因的一些信息。本文档旨在解释每个数值结果代码的含义。
"错误代码"是 "结果代码" 的一个子集,表示出现错误。只有少数几个非错误结果代码:SQLITE_OK、SQLITE_ROW 和 SQLITE_DONE。术语 "错误代码" 指除这三个之外的所有结果代码。
结果代码是有符号的 32 位整数。结果代码的最低有效 8 位定义了一个广泛的类别,称为 "主结果代码"。更重要的位提供有关错误的更详细信息,称为 "扩展结果代码"
请注意,主结果代码始终是扩展结果代码的一部分。给定一个完整的 32 位扩展结果代码,应用程序可以通过仅提取扩展结果代码的最低有效 8 位来始终找到对应的主结果代码。
所有扩展结果代码也都是错误代码。因此,术语 "扩展结果代码" 和 "扩展错误代码" 可互换使用。
出于历史兼容性的原因,C 语言接口默认情况下返回主结果代码。可以使用 sqlite3_extended_errcode() 接口检索最近错误的扩展结果代码。可以使用 sqlite3_extended_result_codes() 接口将 数据库连接 置于一种返回扩展结果代码而不是主结果代码的模式。
所有结果代码都是整数。所有结果代码的符号名称都是使用 sqlite3.h 头文件中的 "#define" 宏创建的。sqlite3.h 头文件中分别有 结果代码定义 和 扩展结果代码定义 部分。
主结果代码符号名称的形式为 "SQLITE_XXXXXX",其中 XXXXXX 是一个大写字母序列。扩展结果代码名称的形式为 "SQLITE_XXXXXX_YYYYYYY",其中 XXXXXX 部分是相应的主结果代码,YYYYYYY 是进一步对结果代码进行分类的扩展。
现有结果代码的名称和数值是固定的,不会改变。但是,将来版本的 SQLite 中可能会出现新的结果代码,尤其是新的扩展结果代码。
31 个结果代码在 sqlite3.h 中定义,并按字母顺序列出在下面
74 个扩展结果代码在 sqlite3.h 中定义,并按字母顺序列出在下面
SQLITE_OK 结果代码表示操作成功,没有错误。大多数其他结果代码表示错误。
SQLITE_ERROR 结果代码是一个通用错误代码,当没有其他更具体的错误代码可用时使用。
SQLITE_INTERNAL 结果代码表示内部故障。在 SQLite 的工作版本中,应用程序永远不应该看到此结果代码。如果应用程序遇到此结果代码,则表明数据库引擎存在错误。
此结果代码可能是由 SQLite 中的错误引起的。但是,应用程序定义的 SQL 函数 或 虚拟表 或 VFS 或其他扩展也可能导致返回此结果代码,因此问题可能不是核心 SQLite 的问题。
SQLITE_PERM 结果代码表示无法为新创建的数据库提供请求的访问模式。
SQLITE_ABORT 结果代码表示操作在完成之前中止,通常是应用程序请求的。另请参见:SQLITE_INTERRUPT。
如果 sqlite3_exec() 的回调函数返回非零值,则 sqlite3_exec() 将返回 SQLITE_ABORT。
如果在与挂起读或写相同的 数据库连接 上发生 ROLLBACK 操作,则挂起的读或写可能会失败并返回 SQLITE_ABORT 或 SQLITE_ABORT_ROLLBACK 错误。
除了结果代码之外,SQLITE_ABORT 值还用作 冲突解决模式,该模式从 sqlite3_vtab_on_conflict() 接口返回。
SQLITE_BUSY 结果代码表示由于其他 数据库连接(通常是另一个进程中的数据库连接)的并发活动,数据库文件无法写入(或在某些情况下无法读取)。
例如,如果进程 A 正在进行大型写入事务,并且同时进程 B 尝试启动新的写入事务,则进程 B 将收到 SQLITE_BUSY 结果,因为 SQLite 每次只支持一个写入者。进程 B 需要等待进程 A 完成其事务才能启动新的事务。 sqlite3_busy_timeout() 和 sqlite3_busy_handler() 接口以及 busy_timeout pragma 可用于进程 B,以帮助其处理 SQLITE_BUSY 错误。
SQLITE_BUSY 错误可能发生在事务的任何时间点:事务首次启动时、在任何写入或更新操作期间或事务提交时。为了避免在事务中间遇到 SQLITE_BUSY 错误,应用程序可以使用 BEGIN IMMEDIATE 而不是仅仅 BEGIN 来启动事务。 BEGIN IMMEDIATE 命令本身可能会返回 SQLITE_BUSY,但如果成功,则 SQLite 保证在同一数据库上进行的后续操作直到下一个 COMMIT 不会返回 SQLITE_BUSY。
另请参见:SQLITE_BUSY_RECOVERY 和 SQLITE_BUSY_SNAPSHOT。
SQLITE_BUSY 结果代码与 SQLITE_LOCKED 的区别在于,SQLITE_BUSY 表示与另一个 数据库连接(可能在另一个进程中)发生冲突,而 SQLITE_LOCKED 表示在同一个 数据库连接 中发生冲突(或有时是与具有 共享缓存 的数据库连接发生冲突)。
SQLITE_LOCKED 结果代码表示由于同一个 数据库连接 内的冲突或与使用 共享缓存 的其他数据库连接发生的冲突,写入操作无法继续。
例如,当另一个线程在同一个 数据库连接 上读取该表时,无法运行 DROP TABLE 语句,因为删除表会导致并发读取器在该表下被删除。
SQLITE_LOCKED 结果代码与 SQLITE_BUSY 的区别在于,SQLITE_LOCKED 表示在同一个 数据库连接 中发生冲突(或在具有 共享缓存 的连接上发生冲突),而 SQLITE_BUSY 表示与另一个数据库连接(可能在另一个进程中)发生冲突。
SQLITE_NOMEM 结果代码表示 SQLite 无法分配完成操作所需的所有内存。换句话说,对 sqlite3_malloc() 或 sqlite3_realloc() 的内部调用已失败,在这种情况下,分配的内存是继续操作所必需的。
当尝试更改当前数据库连接没有写入权限的某些数据时,将返回 SQLITE_READONLY 结果代码。
SQLITE_INTERRUPT 结果代码表示操作被 sqlite3_interrupt() 接口中断。另请参见:SQLITE_ABORT
SQLITE_IOERR 结果代码表示操作无法完成,因为操作系统报告了 I/O 错误。
磁盘空间不足通常会给出 SQLITE_FULL 错误,而不是 SQLITE_IOERR 错误。
针对 I/O 错误,有很多不同的扩展结果代码,用于识别失败的特定 I/O 操作。
SQLITE_CORRUPT 结果代码表示数据库文件已损坏。请参见 如何损坏您的数据库文件,详细了解损坏是如何发生的。
SQLITE_NOTFOUND 结果代码以三种方式暴露出来。
SQLITE_NOTFOUND 可以由 sqlite3_file_control() 接口返回,表示作为第三个参数传递的 文件控制操作码 未被底层的 VFS 识别。
SQLITE_NOTFOUND 也可以由 sqlite3_vfs 对象的 xSetSystemCall() 方法返回。
SQLITE_NOTFOUND 可以由 sqlite3_vtab_rhs_value() 返回,表示约束的右手操作数对发起调用的 xBestIndex 方法不可用。
SQLITE_NOTFOUND 结果代码也在 SQLite 实现内部使用,但这些内部使用不会暴露给应用程序。
SQLITE_FULL 结果代码表示写入无法完成,因为磁盘已满。请注意,此错误可能会在尝试将信息写入主数据库文件时发生,也可能会在写入 临时磁盘文件 时发生。
有时应用程序会遇到此错误,即使有大量的基本磁盘空间,因为错误发生在写入 临时磁盘文件 时,系统将临时文件存储在与基本磁盘空间不同的分区中,该分区的空间远小于基本磁盘空间。
SQLITE_CANTOPEN 结果代码表示 SQLite 无法打开文件。该文件可能是主数据库文件,也可能是多个 临时磁盘文件 之一。
SQLITE_PROTOCOL 结果代码表示 SQLite 使用的文件锁定协议存在问题。SQLITE_PROTOCOL 错误目前仅在使用 WAL 模式 并且尝试启动新事务时才会返回。当两个独立的 数据库连接 都尝试在 WAL 模式 下同时启动事务时,可能会发生竞争条件。竞争失败的连接会退避并尝试再次启动,并在短暂延迟后重试。如果同一个连接在几秒钟内数十次失去锁定竞争,它最终会放弃并返回 SQLITE_PROTOCOL。在实际应用中,SQLITE_PROTOCOL 错误应该非常非常罕见,并且仅在有多个独立进程激烈地竞争写入同一个数据库时才会出现。
SQLITE_SCHEMA 结果代码表示数据库模式已更改。此结果代码可能从 sqlite3_step() 返回,用于使用 sqlite3_prepare() 或 sqlite3_prepare16() 生成的 准备好的语句。如果数据库模式在语句准备时间和语句运行时间之间被其他进程更改,则会导致此错误。
如果 准备好的语句 是从 sqlite3_prepare_v2() 生成的,那么如果模式发生更改,则该语句将自动重新准备,最多重新准备 SQLITE_MAX_SCHEMA_RETRY 次(默认值:50)。如果失败在多次重试后仍然存在,则 sqlite3_step() 接口只会将 SQLITE_SCHEMA 返回给应用程序。
SQLITE_TOOBIG 错误代码表示字符串或 BLOB 太大。SQLite 中字符串或 BLOB 的默认最大长度为 1,000,000,000 字节。此最大长度可以在编译时使用 SQLITE_MAX_LENGTH 编译时选项更改,也可以在运行时使用 sqlite3_limit(db,SQLITE_LIMIT_LENGTH,...) 接口更改。当 SQLite 遇到超过编译时或运行时限制的字符串或 BLOB 时,会导致 SQLITE_TOOBIG 错误。
当向 sqlite3_prepare_v2() 接口之一传递过大的 SQL 语句时,也会导致 SQLITE_TOOBIG 错误代码。SQL 语句的最大长度默认为 1,000,000,000 字节的较小值。SQL 语句的最大长度可以在编译时使用 SQLITE_MAX_SQL_LENGTH 设置,也可以在运行时使用 sqlite3_limit(db,SQLITE_LIMIT_SQL_LENGTH,...) 设置。
SQLITE_CONSTRAINT 错误代码表示在尝试处理 SQL 语句时发生 SQL 约束冲突。有关失败约束的更多信息,请参阅随附的错误消息(通过 sqlite3_errmsg() 或 sqlite3_errmsg16() 返回)或查看 扩展错误代码。
SQLITE_CONSTRAINT 代码也可以用作 虚拟表 实现的 xBestIndex() 方法的返回值。当 xBestIndex() 返回 SQLITE_CONSTRAINT 时,表示提交给 xBestIndex() 的特定输入组合无法生成可用的查询计划,因此不应进一步考虑。
SQLITE_MISMATCH 错误代码表示数据类型不匹配。
SQLite 通常对值类型与要存储该值的容器的声明类型之间的不匹配非常宽容。例如,SQLite 允许应用程序将大型 BLOB 存储在声明类型为 BOOLEAN 的列中。但在少数情况下,SQLite 对类型很严格。当类型不匹配时,在这些少数情况下会返回 SQLITE_MISMATCH 错误。
表的 rowid 必须是整数。尝试将 rowid 设置为除整数以外的任何值(或 NULL,它将自动转换为下一个可用的整数 rowid)都会导致 SQLITE_MISMATCH 错误。
如果应用程序以未定义或不受支持的方式使用任何 SQLite 接口,则可能会返回 SQLITE_MISUSE 返回代码。例如,在准备好的语句被 最终确定 后使用它可能会导致 SQLITE_MISUSE 错误。
SQLite 尝试检测误用并使用此结果代码报告误用。但是,不能保证能够成功检测到误用。误用检测是概率性的。应用程序永远不要依赖 SQLITE_MISUSE 返回值。
如果 SQLite 从任何接口返回 SQLITE_MISUSE,则表示应用程序代码错误,需要进行修复。不要发布有时从标准 SQLite 接口返回 SQLITE_MISUSE 的应用程序,因为该应用程序包含潜在的严重错误。
当数据库增长到超过文件系统可以处理的大小,在不支持大文件的系统上可能会返回 SQLITE_NOLFS 错误。"NOLFS" 代表 "NO Large File Support"(不支持大文件)。
当 授权回调 表示正在准备的 SQL 语句未获授权时,将返回 SQLITE_AUTH 错误。
SQLITE_FORMAT 错误代码目前未被 SQLite 使用。
SQLITE_RANGE 错误表明,sqlite3_bind 例程之一的参数编号参数,或 sqlite3_column 例程之一的列编号参数超出范围。
在尝试打开文件时,SQLITE_NOTADB 错误表示正在打开的文件似乎不是 SQLite 数据库文件。
SQLITE_NOTICE 结果代码不会由任何 C/C++ 接口返回。但是,SQLITE_NOTICE(更确切地说是其 扩展错误代码 之一)有时用作 sqlite3_log() 回调中的第一个参数,表示正在执行不寻常的操作。
SQLITE_WARNING 结果代码不会由任何 C/C++ 接口返回。但是,SQLITE_WARNING(更确切地说是其 扩展错误代码 之一)有时用作 sqlite3_log() 回调中的第一个参数,表示正在执行不寻常的操作,并且该操作可能不建议执行。
sqlite3_step() 返回的 SQLITE_ROW 结果代码表示有另一行输出可用。
SQLITE_DONE 结果代码表示操作已完成。SQLITE_DONE 结果代码最常被用作 sqlite3_step() 的返回值,表示 SQL 语句已运行完成。但是 SQLITE_DONE 也可以由其他多步骤接口返回,例如 sqlite3_backup_step()。
sqlite3_load_extension() 接口将 扩展 加载到单个数据库连接中。默认行为是在数据库连接关闭时自动卸载该扩展。但是,如果扩展入口点返回 SQLITE_OK_LOAD_PERMANENTLY 而不是 SQLITE_OK,则该扩展在数据库连接关闭后仍将保留在进程地址空间中。换句话说,数据库连接关闭时,不会为该扩展调用 sqlite3_vfs 对象的 xDlClose 方法。
SQLITE_OK_LOAD_PERMANENTLY 返回代码对注册新的 VFS 的 可加载扩展 很有用,例如。
SQLITE_ERROR_MISSING_COLLSEQ 结果代码表示无法准备 SQL 语句,因为在该 SQL 语句中命名的排序规则无法找到。
有时当遇到此错误代码时,sqlite3_prepare_v2() 例程会将错误转换为 SQLITE_ERROR_RETRY,并尝试再次准备 SQL 语句,使用不依赖于未知排序规则的不同查询计划。
SQLITE_BUSY_RECOVERY 错误代码是 SQLITE_BUSY 的 扩展错误代码,表示操作无法继续,因为另一个进程正在忙于恢复 WAL 模式 数据库文件,该文件在崩溃后需要恢复。SQLITE_BUSY_RECOVERY 错误代码仅在 WAL 模式 数据库中出现。
SQLITE_LOCKED_SHAREDCACHE 结果代码表示对 SQLite 数据记录的访问被另一个数据库连接阻止,该数据库连接正在 共享缓存模式 下使用相同的记录。当两个或多个数据库连接共享相同的缓存,并且其中一个连接正在修改该缓存中的记录时,为了防止读取器看到损坏或部分完成的更改,其他连接将被阻止访问该数据,直到修改完成为止。
SQLITE_READONLY_RECOVERY 错误代码是 SQLITE_READONLY 的 扩展错误代码。SQLITE_READONLY_RECOVERY 错误代码表示无法打开 WAL 模式 数据库,因为数据库文件需要恢复,而恢复需要写入权限,但只有读取权限可用。
SQLITE_IOERR_READ 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示在 VFS 层尝试从磁盘上的文件读取时发生的 I/O 错误。此错误可能是由于硬件故障或文件打开时文件系统被卸载造成的。
SQLITE_CORRUPT_VTAB 错误代码是 扩展错误代码,用于 SQLITE_CORRUPT,由 虚拟表 使用。 虚拟表 可能会返回 SQLITE_CORRUPT_VTAB 来指示虚拟表中的内容已损坏。
SQLITE_CANTOPEN_NOTEMPDIR 错误代码不再使用。
SQLITE_CONSTRAINT_CHECK 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,指示 CHECK 约束 失败。
SQLITE_AUTH_USER 错误代码是 扩展错误代码,用于 SQLITE_AUTH,指示在数据库上尝试执行操作时,登录用户没有足够的授权。
当 WAL 模式 数据库文件被恢复时,SQLITE_NOTICE_RECOVER_WAL 结果代码将传递给 sqlite3_log() 的回调。
只要使用 自动索引,SQLITE_WARNING_AUTOINDEX 结果代码就会传递给 sqlite3_log() 的回调。这可以作为对应用程序设计者的警告,提示数据库可能受益于额外的索引。
SQLITE_ERROR_RETRY 用于在内部促使 sqlite3_prepare_v2()(或其创建准备好的语句的任何一个兄弟例程)再次尝试准备一个在先前尝试中失败的语句。
SQLITE_ABORT_ROLLBACK 错误代码是 扩展错误代码,用于 SQLITE_ABORT,指示 SQL 语句因 SQL 语句第一次开始时处于活动状态的事务回滚而中止。当回滚发生时,挂起的写操作始终会以该错误失败。 ROLLBACK 仅会在回滚的事务中更改了模式时才会导致挂起的读操作失败。
SQLITE_BUSY_SNAPSHOT 错误代码是 扩展错误代码,用于 SQLITE_BUSY,它发生在 WAL 模式 数据库上,当数据库连接尝试将读事务提升为写事务,但发现另一个 数据库连接 已经写入数据库,从而使先前读取无效。
以下场景说明了 SQLITE_BUSY_SNAPSHOT 错误是如何产生的。
SQLITE_LOCKED_VTAB 结果代码不被 SQLite 内核使用,但可供扩展使用。虚拟表实现可以返回此结果代码来指示由于其他线程或进程持有的锁而无法完成当前操作。
R-Tree 扩展 在尝试更新 R-Tree 时返回此结果代码,而另一个准备好的语句正在积极读取 R-Tree。更新无法进行,因为对 R-Tree 的任何更改都可能涉及节点的重新排序和重新平衡,这将破坏读游标,导致某些行重复,而其他行被省略。
SQLITE_READONLY_CANTLOCK 错误代码是 扩展错误代码,用于 SQLITE_READONLY。SQLITE_READONLY_CANTLOCK 错误代码指示 SQLite 无法在 WAL 模式 数据库上获得读锁,因为与该数据库关联的共享内存文件是只读的。
SQLITE_IOERR_SHORT_READ 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示 VFS 层的读取尝试无法获得与请求一样多的字节数。这可能是由于文件被截断造成的。
SQLITE_CORRUPT_SEQUENCE 结果代码表示 sqlite_sequence 表的模式已损坏。sqlite_sequence 表用于帮助实现 AUTOINCREMENT 功能。sqlite_sequence 表应该具有以下格式
CREATE TABLE sqlite_sequence(name,seq);
如果 SQLite 发现 sqlite_sequence 表具有任何其他格式,它将返回 SQLITE_CORRUPT_SEQUENCE 错误。
SQLITE_CANTOPEN_ISDIR 错误代码是 扩展错误代码,用于 SQLITE_CANTOPEN,指示文件打开操作失败,因为该文件实际上是一个目录。
SQLITE_CONSTRAINT_COMMITHOOK 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,指示 提交钩子回调 返回非零值,从而导致 SQL 语句回滚。
当 热日志 回滚时,SQLITE_NOTICE_RECOVER_ROLLBACK 结果代码将传递给 sqlite3_log() 的回调。
当尝试使用 sqlite3_snapshot_open() 接口启动对数据库的历史版本的读取事务时,可能会返回 SQLITE_ERROR_SNAPSHOT 结果代码。如果历史快照不再可用,那么读取事务将以 SQLITE_ERROR_SNAPSHOT 失败。此错误代码仅在 SQLite 使用 -DSQLITE_ENABLE_SNAPSHOT 编译时才有可能。
SQLITE_BUSY_TIMEOUT 错误代码指示 VFS 层中的阻塞 Posix 咨询文件锁请求因超时而失败。阻塞 Posix 咨询锁仅作为 SQLite 专有扩展可用,即使那样,也只有在 SQLite 使用 SQLITE_EANBLE_SETLK_TIMEOUT 编译时选项编译时才受支持。
SQLITE_READONLY_ROLLBACK 错误代码是 扩展错误代码,用于 SQLITE_READONLY。SQLITE_READONLY_ROLLBACK 错误代码指示数据库无法打开,因为它有一个 热日志 需要回滚,但由于数据库是只读的,因此无法回滚。
SQLITE_IOERR_WRITE 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示在 VFS 层尝试写入磁盘上的文件时发生的 I/O 错误。此错误可能是由于硬件故障或文件打开时文件系统被卸载造成的。如果文件系统已满,则不会发生此错误,因为为此目的存在一个单独的错误代码(SQLITE_FULL)。
SQLITE_CORRUPT_INDEX 结果代码表示 SQLite 检测到索引中存在或丢失了条目。这是 SQLITE_CORRUPT 错误代码的特殊情况,它表明问题可以通过运行 REINDEX 命令来解决,假设数据库文件中不存在其他问题。
SQLITE_CANTOPEN_FULLPATH 错误代码是 扩展错误代码,用于 SQLITE_CANTOPEN,指示文件打开操作失败,因为操作系统无法将文件名转换为完整路径名。
SQLITE_CONSTRAINT_FOREIGNKEY 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,指示 外键约束 失败。
SQLITE_READONLY_DBMOVED 错误代码是 扩展错误代码,用于 SQLITE_READONLY。SQLITE_READONLY_DBMOVED 错误代码指示数据库无法修改,因为数据库文件已在打开后移动,因此任何尝试修改数据库的操作都可能导致数据库损坏,如果进程崩溃,因为 回滚日志 的命名将不正确。
SQLITE_IOERR_FSYNC 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示在 VFS 层尝试将先前写入的内容从操作系统和/或磁盘控制缓冲区刷新到持久存储时发生的 I/O 错误。换句话说,此代码表示 unix 中 fsync() 系统调用或 windows 中 FlushFileBuffers() 系统调用出现问题。
SQLITE_CANTOPEN_CONVPATH 错误代码是 扩展错误代码,用于 SQLITE_CANTOPEN,仅由 Cygwin VFS 使用,并指示 cygwin_conv_path() 系统调用在尝试打开文件时失败。另请参阅:SQLITE_IOERR_CONVPATH
SQLITE_CONSTRAINT_FUNCTION 错误代码目前不被 SQLite 内核使用。但是,此错误代码可供扩展函数使用。
SQLITE_READONLY_CANTINIT 结果代码源于 VFS 的 xShmMap 方法,指示 WAL 模式 使用的共享内存区域存在,但其内容不可靠且当前进程无法使用,因为当前进程没有对共享内存区域的写权限。(WAL 模式的共享内存区域通常是一个以“-wal”为后缀的文件,该文件被映射到进程空间。如果当前进程没有对该文件的写权限,那么它就无法写入共享内存。)
SQLite 中的更高层逻辑通常会拦截错误代码并创建一个临时的内存内共享内存区域,以便当前进程至少可以读取数据库的内容。此结果代码不应到达应用程序接口层。
SQLITE_IOERR_DIR_FSYNC 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示在 VFS 层尝试对目录调用 fsync() 时发生的 I/O 错误。unix VFS 尝试在创建或删除某些文件后同步目录,以确保这些文件在断电或系统崩溃后仍然出现在文件系统中。此错误代码表示尝试执行该 fsync() 时出现问题。
SQLITE_CANTOPEN_DIRTYWAL 结果代码目前没有使用。
SQLITE_CONSTRAINT_NOTNULL 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,指示 NOT NULL 约束 失败。
SQLITE_READONLY_DIRECTORY 结果代码指示数据库是只读的,因为进程没有权限在与数据库相同的目录中创建日志文件,而创建日志文件是写入的先决条件。
SQLITE_IOERR_TRUNCATE 错误代码是 扩展错误代码,用于 SQLITE_IOERR,指示在 VFS 层尝试将文件截断为更小尺寸时发生的 I/O 错误。
当使用 sqlite3_open() 接口及其兄弟接口时,如果使用 SQLITE_OPEN_NOFOLLOW 标志并且数据库文件是符号链接,则会返回 SQLITE_CANTOPEN_SYMLINK 结果代码。
SQLITE_CONSTRAINT_PRIMARYKEY 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示 主键约束 失败。
SQLITE_IOERR_FSTAT 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 VFS 层尝试调用 fstat()(或等效函数)以确定文件大小或访问权限等信息时,发生的 I/O 错误。
SQLITE_CONSTRAINT_TRIGGER 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示 RAISE 函数 在 触发器 内触发,导致 SQL 语句中止。
SQLITE_IOERR_UNLOCK 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xUnlock 方法中发生的 I/O 错误。
SQLITE_CONSTRAINT_UNIQUE 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示 唯一约束 失败。
SQLITE_IOERR_RDLOCK 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xLock 方法中尝试获取读锁时发生的 I/O 错误。
SQLITE_CONSTRAINT_VTAB 错误代码当前没有被 SQLite 核心使用。但是,此错误代码可供应用程序定义的 虚拟表 使用。
SQLITE_IOERR_DELETE 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_vfs 对象上的 xDelete 方法中发生的 I/O 错误。
SQLITE_CONSTRAINT_ROWID 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示 rowid 不唯一。
SQLITE_IOERR_BLOCKED 错误代码不再使用。
SQLITE_CONSTRAINT_PINNED 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示 UPDATE 触发器 尝试在更新中间删除正在更新的行。
SQLITE_IOERR_NOMEM 错误代码有时由 VFS 层返回,表示由于无法分配足够的内存,无法完成操作。此错误代码通常在返回给应用程序之前,由 SQLite 的更高层转换为 SQLITE_NOMEM。
SQLITE_CONSTRAINT_DATATYPE 错误代码是 扩展错误代码,用于 SQLITE_CONSTRAINT,表示插入或更新尝试存储的值与定义为 STRICT 的表中列的声明类型不一致。
SQLITE_IOERR_ACCESS 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_vfs 对象上的 xAccess 方法中发生的 I/O 错误。
SQLITE_IOERR_CHECKRESERVEDLOCK 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xCheckReservedLock 方法中发生的 I/O 错误。
SQLITE_IOERR_LOCK 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在咨询文件锁定逻辑中发生的 I/O 错误。通常,SQLITE_IOERR_LOCK 错误表示获取 PENDING 锁 时出现问题。但是,它也可能表示某些专用 VFS 在 Mac 上发生的各种锁定错误。
SQLITE_IOERR_CLOSE 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xClose 方法中发生的 I/O 错误。
SQLITE_IOERR_DIR_CLOSE 错误代码不再使用。
SQLITE_IOERR_SHMOPEN 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xShmMap 方法中尝试打开新的共享内存段时发生的 I/O 错误。
SQLITE_IOERR_SHMSIZE 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xShmMap 方法中尝试在 "shm 文件" 中扩大作为 WAL 模式 事务处理的一部分时发生的 I/O 错误。此错误可能表示底层文件系统卷空间不足。
SQLITE_IOERR_SHMLOCK 错误代码不再使用。
SQLITE_IOERR_SHMMAP 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xShmMap 方法中尝试将共享内存段映射到进程地址空间时发生的 I/O 错误。
SQLITE_IOERR_SEEK 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xRead 或 xWrite 方法中尝试将文件描述符定位到将要进行读写操作的文件的起始点时发生的 I/O 错误。
SQLITE_IOERR_DELETE_NOENT 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示 sqlite3_vfs 对象上的 xDelete 方法失败,因为要删除的文件不存在。
SQLITE_IOERR_MMAP 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示在 sqlite3_io_methods 对象上的 xFetch 或 xUnfetch 方法中尝试映射或取消映射数据库文件的一部分到进程地址空间时发生的 I/O 错误。
SQLITE_IOERR_GETTEMPPATH 错误代码是 扩展错误代码,用于 SQLITE_IOERR,表示 VFS 无法确定合适的目录来放置临时文件。
SQLITE_IOERR_CONVPATH 错误代码是 扩展错误代码,用于 SQLITE_IOERR,仅由 Cygwin VFS 使用,表示 cygwin_conv_path() 系统调用失败。另见:SQLITE_CANTOPEN_CONVPATH
SQLITE_IOERR_VNODE 错误代码是为扩展预留的代码。它没有被 SQLite 核心使用。
SQLITE_IOERR_AUTH 错误代码是为扩展预留的代码。它没有被 SQLite 核心使用。
SQLITE_IOERR_BEGIN_ATOMIC 错误代码表示底层操作系统在 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 文件控制上报告了错误。这只有在启用了 SQLITE_ENABLE_ATOMIC_WRITE 并且数据库托管在支持原子写入的文件系统上时才会出现。
SQLITE_IOERR_COMMIT_ATOMIC 错误代码表示底层操作系统在 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 文件控制上报告了错误。这只有在启用了 SQLITE_ENABLE_ATOMIC_WRITE 并且数据库托管在支持原子写入的文件系统上时才会出现。
SQLITE_IOERR_ROLLBACK_ATOMIC 错误代码表示底层操作系统在 SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 文件控制上报告了错误。这只有在启用了 SQLITE_ENABLE_ATOMIC_WRITE 并且数据库托管在支持原子写入的文件系统上时才会出现。
SQLITE_IOERR_DATA 错误代码是 扩展错误代码,用于 SQLITE_IOERR,仅由 校验和 VFS 垫片 使用,表示数据库文件页面上的校验和不正确。
SQLITE_IOERR_CORRUPTFS 错误代码是 扩展错误代码,用于 SQLITE_IOERR,仅由 VFS 使用,表示搜索或读取失败是由于请求超出了文件的边界而不是普通的设备故障。这通常表示文件系统已损坏。
本页最后修改于 2024-08-14 17:04:32 UTC