Result and Error Codes
Result and Error Codes
1.结果代码与错误代码
2.主要结果代码与扩展结果代码
3.定义
4.主要结果代码列表
5.扩展结果代码列表
6.结果代码意义
Overview
SQLite C语言接口中的许多例程返回数字结果代码,指示成功或失败,并在出现故障时提供关于失败原因的一些概念。本文旨在解释每个数字结果代码的含义。
1. Result Codes versus Error Codes
“错误代码”是“结果代码”的一个子集,表明出现了问题。只有少数非错误结果代码:SQLITE_OK,SQLITE_ROW和SQLITE_DONE。术语“错误代码”是指除这三个以外的任何结果代码。
2. Primary Result Codes versus Extended Result Codes
结果代码是带符号的32位整数。结果代码的最低有效8位定义了一个宽泛的类别,称为“主要结果代码”。更重要的位提供了关于错误的更详细的信息,并被称为“扩展结果代码”
请注意,主要结果代码始终是扩展结果代码的一部分。给定完整的32位扩展结果代码,应用程序总是可以通过仅提取扩展结果代码的最低有效8位来找到相应的主结果代码。
所有扩展结果代码也是错误代码。因此,术语“扩展结果代码”和“扩展错误代码”是可以互换的。
对于历史兼容性,默认情况下,C语言接口返回主要结果代码。使用sqlite3_extended_errcode()接口可以检索最近一次错误的扩展结果代码。sqlite3_extended_result_codes()接口可用于将数据库连接置于一种模式下,在该模式下返回扩展结果代码而不是主要结果代码。
3. Definitions
所有结果代码都是整数。所有结果代码的符号名称都是使用sqlite3.h头文件中的“#define”宏创建的。在结果代码定义和扩展结果代码定义的sqlite3.h头文件中有单独的部分。
主结果代码符号名称的格式为“SQLITE_XXXXXX”,其中XXXXXX是大写字母字符序列。扩展结果代码的名称格式为“SQLITE_XXXXXX_YYYYYYY”,其中XXXXXX部分是相应的主结果代码,而YYYYYYY是进一步对结果代码进行分类的扩展。
现有结果代码的名称和数值是固定且不变的。但是,新的结果代码,特别是新的扩展结果代码,可能会出现在未来的SQLite版本中。
4. Primary Result Code List
$ nPrimCode结果代码在sqlite3.h中定义,并按以下字母顺序列出:
- SQLITE_ABORT (4)
- SQLITE_AUTH (23)
- SQLITE_BUSY (5)
- SQLITE_CANTOPEN (14)
- SQLITE_CONSTRAINT (19)
- SQLITE_CORRUPT (11)
- SQLITE_DONE (101)
- SQLITE_EMPTY (16)
- SQLITE_ERROR (1)
- SQLITE_FORMAT (24)
- SQLITE_FULL (13)
- SQLITE_INTERNAL (2)
- SQLITE_INTERRUPT (9)
- SQLITE_IOERR (10)
- SQLITE_LOCKED (6)
- SQLITE_MISMATCH (20)
- SQLITE_MISUSE (21)
- SQLITE_NOLFS (22)
- SQLITE_NOMEM (7)
- SQLITE_NOTADB (26)
- SQLITE_NOTFOUND (12)
- SQLITE_NOTICE (27)
- SQLITE_OK (0)
- SQLITE_PERM (3)
- SQLITE_PROTOCOL (15)
- SQLITE_RANGE (25)
- SQLITE_READONLY (8)
- SQLITE_ROW (100)
- SQLITE_SCHEMA (17)
- SQLITE_TOOBIG (18)
- SQLITE_WARNING (28)
5. Extended Result Code List
$ nExtCode扩展结果代码在sqlite3.h中定义,并在下面按字母顺序列出:
- SQLITE_ABORT_ROLLBACK (516)
- SQLITE_BUSY_RECOVERY (261)
- SQLITE_BUSY_SNAPSHOT (517)
- SQLITE_CANTOPEN_CONVPATH (1038)
- SQLITE_CANTOPEN_FULLPATH (782)
- SQLITE_CANTOPEN_ISDIR (526)
- SQLITE_CANTOPEN_NOTEMPDIR (270)
- SQLITE_CONSTRAINT_CHECK (275)
- SQLITE_CONSTRAINT_COMMITHOOK (531)
- SQLITE_CONSTRAINT_FOREIGNKEY (787)
- SQLITE_CONSTRAINT_FUNCTION (1043)
- SQLITE_CONSTRAINT_NOTNULL (1299)
- SQLITE_CONSTRAINT_PRIMARYKEY (1555)
- SQLITE_CONSTRAINT_ROWID (2579)
- SQLITE_CONSTRAINT_TRIGGER (1811)
- SQLITE_CONSTRAINT_UNIQUE (2067)
- SQLITE_CONSTRAINT_VTAB (2323)
- SQLITE_CORRUPT_VTAB (267)
- SQLITE_IOERR_ACCESS (3338)
- SQLITE_IOERR_BLOCKED (2826)
- SQLITE_IOERR_CHECKRESERVEDLOCK (3594)
- SQLITE_IOERR_CLOSE (4106)
- SQLITE_IOERR_CONVPATH (6666)
- SQLITE_IOERR_DELETE (2570)
- SQLITE_IOERR_DELETE_NOENT (5898)
- SQLITE_IOERR_DIR_CLOSE (4362)
- SQLITE_IOERR_DIR_FSYNC (1290)
- SQLITE_IOERR_FSTAT (1802)
- SQLITE_IOERR_FSYNC (1034)
- SQLITE_IOERR_GETTEMPPATH (6410)
- SQLITE_IOERR_LOCK (3850)
- SQLITE_IOERR_MMAP (6154)
- SQLITE_IOERR_NOMEM (3082)
- SQLITE_IOERR_RDLOCK (2314)
- SQLITE_IOERR_READ (266)
- SQLITE_IOERR_SEEK (5642)
- SQLITE_IOERR_SHMLOCK (5130)
- SQLITE_IOERR_SHMMAP (5386)
- SQLITE_IOERR_SHMOPEN (4618)
- SQLITE_IOERR_SHMSIZE (4874)
- SQLITE_IOERR_SHORT_READ (522)
- SQLITE_IOERR_TRUNCATE (1546)
- SQLITE_IOERR_UNLOCK (2058)
- SQLITE_IOERR_WRITE (778)
- SQLITE_LOCKED_SHAREDCACHE (262)
- SQLITE_NOTICE_RECOVER_ROLLBACK (539)
- SQLITE_NOTICE_RECOVER_WAL (283)
- SQLITE_OK_LOAD_PERMANENTLY (256)
- SQLITE_READONLY_CANTLOCK (520)
- SQLITE_READONLY_DBMOVED (1032)
- SQLITE_READONLY_RECOVERY (264)
- SQLITE_READONLY_ROLLBACK (776)
- SQLITE_WARNING_AUTOINDEX (284)
6. Result Code Meanings
所有$ nResCode结果代码值的含义如下所示,按数字顺序排列。
(0) SQLITE_OK
SQLITE_OK结果代码表示操作成功,并且没有错误。大多数其他结果代码表示错误。
(1) SQLITE_ERROR
SQLITE_ERROR结果代码是一个通用的错误代码,在没有其他更具体的错误代码可用时使用。
(2) SQLITE_INTERNAL
SQLITE_INTERNAL结果代码指示内部故障。在SQLite的工作版本中,应用程序不应该看到这个结果代码。如果应用程序确实遇到此结果代码,则表明数据库引擎中存在错误。
SQLite当前不会生成这个结果代码。但是,应用程序定义的SQL函数或虚拟表或VFS或其他扩展可能会导致返回此结果代码。
(3) SQLITE_PERM
SQLITE_PERM结果代码指示无法提供新创建的数据库所请求的访问模式。
(4) SQLITE_ABORT
SQLITE_ABORT结果代码指示操作在完成之前中止,通常是应用程序请求。另请参阅:SQLITE_INTERRUPT。
如果sqlite3_exec()的回调函数返回非零值,那么sqlite3_exec()将返回SQLITE_ABORT。
如果ROLLBACK操作在同一数据库连接上发生,与挂起的读取或写入操作相同,则挂起的读取或写入操作可能会失败,并出现SQLITE_ABORT或SQLITE_ABORT_ROLLBACK错误。
除了作为结果代码之外,SQLITE_ABORT值还用作从sqlite3_vtab_on_conflict() 接口返回的冲突解决模式。
(5) SQLITE_BUSY
SQLITE_BUSY结果代码表示数据库文件由于其他数据库连接(通常是单独进程中的数据库连接)的并发活动而无法写入(或在某些情况下被读取)。
例如,如果进程A处于大量写入事务的中间,并且同时进程B尝试启动新的写入事务,则进程B将取回SQLITE_BUSY结果,因为SQLite一次只支持一个写入器。进程B需要等待进程A在开始新的事务之前完成其事务。sqlite3_busy_timeout()和sqlite3_busy_handler()接口以及busy_timeout编译指示可用于处理B以帮助处理SQLITE_BUSY错误。
SQLITE_BUSY错误可能发生在事务中的任何时刻:事务首次启动时,任何写入或更新操作期间,或事务提交时。为了避免在事务中遇到SQLITE_BUSY错误,应用程序可以使用BEGIN IMMEDIATE而不是BEGIN来启动事务。BEGIN IMMEDIATE命令本身可能会返回SQLITE_BUSY,但如果成功,则SQLite保证通过下一个COMMIT不会对相同数据库执行后续操作将返回SQLITE_BUSY。
See also: SQLITE_BUSY_RECOVERY and SQLITE_BUSY_SNAPSHOT.
SQLITE_BUSY结果代码与SQLITE_LOCKED的不同之处在于SQLITE_BUSY指示与单独的数据库连接有冲突,可能在单独的进程中,而SQLITE_LOCKED指示在同一数据库连接(或有时与具有共享高速缓存的数据库连接)内发生冲突。
(6) SQLITE_LOCKED
SQLITE_LOCKED结果代码指示由于相同数据库连接内的冲突或与使用共享缓存的不同数据库连接冲突而导致写入操作无法继续。
例如,当另一个线程从同一数据库连接上的该表读取数据时,不能运行DROP TABLE语句,因为删除该表会将该表从同时读取器下删除。
SQLITE_LOCKED结果代码与SQLITE_BUSY的不同之处在于,SQLITE_LOCKED表示在同一数据库连接(或与共享高速缓存的连接上)存在冲突,而SQLITE_BUSY表示与不同数据库连接有冲突,可能在不同的进程中。
(7) SQLITE_NOMEM
SQLITE_NOMEM结果代码表示SQLite无法分配完成操作所需的所有内存。换句话说,在为了继续操作而需要分配内存的情况下,对sqlite3_malloc()或sqlite3_realloc()的内部调用失败。
(8) SQLITE_READONLY
当尝试修改当前数据库连接没有写权限的某些数据时,返回SQLITE_READONLY结果代码。
(9) SQLITE_INTERRUPT
SQLITE_INTERRUPT结果代码指示操作被sqlite3_interrupt()接口中断。
(10) SQLITE_IOERR
SQLITE_IOERR结果代码表示由于操作系统报告了I / O错误,操作无法完成。
完整的磁盘驱动器通常会发出SQLITE_FULL错误,而不是SQLITE_IOERR错误。
I / O错误有许多不同的扩展结果代码,用于标识失败的特定I / O操作。
(11) SQLITE_CORRUPT
SQLITE_CORRUPT结果代码表示数据库文件已损坏。有关如何发生损坏的详细信息,请参阅如何破坏数据库文件。
(12) SQLITE_NOTFOUND
SQLITE_NOTFOUND结果代码在两个上下文中使用。SQLITE_NOTFOUND可以由sqlite3_file_control() 接口返回,以指示作为第三个参数传递的文件控制操作码未被底层VFS识别。SQLITE_NOTFOUND也可以由sqlite3_vfs对象的xSetSystemCall() 方法返回。
SQLITE_NOTFOUND结果代码也由SQLite实现内部使用,但这些内部使用不会暴露给应用程序。
(13) SQLITE_FULL
SQLITE_FULL结果代码表明写入无法完成,因为磁盘已满。请注意,尝试将信息写入主数据库文件时可能发生此错误,或者在写入临时磁盘文件时也可能发生此错误。
有时,即使存在大量的主磁盘空间,应用程序也会遇到此错误,因为在将临时文件存储在主磁盘空间少得多的单独分区上的系统上写入临时磁盘文件时发生错误。
(14) SQLITE_CANTOPEN
SQLITE_CANTOPEN结果代码表示SQLite无法打开文件。有问题的文件可能是主数据库文件或多个临时磁盘文件。
(15) SQLITE_PROTOCOL
SQLITE_PROTOCOL结果代码指示SQLite使用的文件锁定协议存在问题。SQLITE_PROTOCOL错误当前仅在使用WAL模式并尝试启动新事务时返回。当两个单独的数据库连接都尝试在WAL模式下同时启动事务时,可能会出现竞争状况。比赛的输家在短暂的延迟后退赛并再次尝试。如果同一个连接在几秒钟的时间内失去锁定竞赛几十次,它最终会放弃并返回SQLITE_PROTOCOL。SQLITE_PROTOCOL错误在实践中应该很少出现,并且只有在许多单独的进程竞争激烈地写入同一个数据库时才会出现。
(16) SQLITE_EMPTY
SQLITE_EMPTY结果代码当前未被使用。
(17) SQLITE_SCHEMA
SQLITE_SCHEMA结果代码指示数据库模式已更改。对于使用sqlite3_prepare() 或sqlite3_prepare16() 生成的预处理语句,可以从sqlite3_step() 返回此结果代码。如果数据库模式在语句准备时间和语句运行时间之间由其他进程更改,则可能导致此错误。
如果从sqlite3_prepare_v2() 生成预准备语句,那么如果模式更改,语句会自动重新准备,直到SQLITE_MAX_SCHEMA_RETRY次(默认值:50)。sqlite3_step() 接口将只会返回SQLITE_SCHEMA回到应用程序,如果失败持续多次重试。
(18) SQLITE_TOOBIG
SQLITE_TOOBIG错误代码表示字符串或BLOB太大。SQLite中字符串或BLOB的默认最大长度是1,000,000,000字节。这个最大长度可以在编译时使用SQLITE_MAX_LENGTH编译时选项或在运行时使用sqlite3_limit(db,SQLITE_LIMIT_LENGTH,...)接口进行更改。当SQLite遇到超过编译时或运行时限制的字符串或BLOB时,会产生SQLITE_TOOBIG错误。
当过大的SQL语句传入sqlite3_prepare_v2() 接口之一时,也会导致SQLITE_TOOBIG错误代码。SQL语句的最大长度默认为1,000,000字节的较小值。最大SQL语句长度可以在编译时使用SQLITE_MAX_SQL_LENGTH设置,或者在运行时使用sqlite3_limit(db,SQLITE_LIMIT_SQL_LENGTH,...)设置。
(19) SQLITE_CONSTRAINT
SQLITE_CONSTRAINT错误代码表示尝试处理SQL语句时发生SQL约束违规。通过查阅随附的错误消息(通过sqlite3_errmsg() 或sqlite3_errmsg16() 返回)或查看扩展错误代码可以找到有关失败约束的其他信息。
(20) SQLITE_MISMATCH
SQLITE_MISMATCH错误代码指示数据类型不匹配。
SQLite通常非常容忍值的类型与要存储该值的容器的声明类型之间的不匹配。例如,SQLite允许应用程序在声明类型为BOOLEAN的列中存储大BLOB。但在少数情况下,SQLite对类型严格要求。当类型不匹配时,在少数情况下会返回SQLITE_MISMATCH错误。
表的rowid必须是整数。尝试将rowid设置为除整数以外的任何内容(或者将自动转换为下一个可用整数rowid的NULL)会导致SQLITE_MISMATCH错误。
(21) SQLITE_MISUSE
如果应用程序以未定义或不支持的方式使用任何SQLite接口,则可能会返回SQLITE_MISUSE返回码。例如,在准备好的语句已完成后使用准备好的语句可能会导致SQLITE_MISUSE错误。
SQLite会尝试检测滥用情况并使用此结果代码报告滥用情况。但是,不能保证检测到误用会成功。滥用检测是概率性的。应用程序不应该依赖于SQLITE_MISUSE返回值。
如果SQLite从任何接口返回SQLITE_MISUSE,那意味着应用程序编码不正确,需要修复。不要发布有时从标准SQLite接口返回SQLITE_MISUSE的应用程序,因为该应用程序包含潜在的严重错误。
(22) SQLITE_NOLFS
当数据库增长到大于文件系统可以处理的数量时,SQLITE_NOLFS错误可以在不支持大文件的系统上返回。“NOLFS”代表“无大文件支持”。
(23) SQLITE_AUTH
授权人回调指示正在准备的SQL语句未经授权时,将返回SQLITE_AUTH错误。
(24) SQLITE_FORMAT
SQLITE当前不使用SQLITE_FORMAT错误代码。
(25) SQLITE_RANGE
SQLITE_RANGE错误索引,其中一个sqlite3_bind例程的参数号参数或sqlite3_column例程之一中的列号超出范围。
(26) SQLITE_NOTADB
尝试打开文件时,SQLITE_NOTADB错误表示正在打开的文件看起来不是SQLite数据库文件。
(27) SQLITE_NOTICE
SQLITE_NOTICE结果代码不会被任何C / C ++接口返回。但是,SQLITE_NOTICE(或其中的一个扩展错误代码)有时用作sqlite3_log() 回调中的第一个参数,以指示正在发生异常操作。
(28) SQLITE_WARNING
任何C / C ++接口都不会返回SQLITE_WARNING结果代码。但是,SQLITE_WARNING(或者更确切地说是它的一个扩展错误代码)有时用作sqlite3_log() 回调中的第一个参数,以表明发生了一种不寻常的,可能不明智的操作。
(100) SQLITE_ROW
sqlite3_step() 返回的SQLITE_ROW结果代码表示另一行输出可用。
(101) SQLITE_DONE
SQLITE_DONE结果代码表示操作已完成。SQLITE_DONE结果代码最常见于sqlite3_step() 的返回值,表示SQL语句已完成运行。但SQLITE_DONE也可以由其他多步骤接口(如sqlite3_backup_step() )返回。
(256) SQLITE_OK_LOAD_PERMANENTLY
sqlite3_load_extension()接口将扩展加载到单个数据库连接中。默认行为是在数据库连接关闭时自动卸载该扩展。但是,如果扩展入口点返回SQLITE_OK_LOAD_PERMANENTLY而不是SQLITE_OK,那么在数据库连接关闭后,扩展仍将加载到进程地址空间中。换句话说,当数据库连接关闭时,不会为扩展名调用sqlite3_vfs对象的xDlClose方法。
例如,SQLITE_OK_LOAD_PERMANENTLY返回码对注册新VFS的可装载扩展非常有用。
(261) SQLITE_BUSY_RECOVERY
SQLITE_BUSY_RECOVERY错误代码是SQLITE_BUSY的扩展错误代码,指示操作无法继续,因为另一个进程正忙于在崩溃后恢复WAL模式数据库文件。SQLITE_BUSY_RECOVERY错误代码只发生在WAL模式数据库上。
(262) SQLITE_LOCKED_SHAREDCACHE
SQLITE_LOCKED_SHAREDCACHE错误代码是SQLITE_LOCKED的扩展错误代码,指示由于与发生错误的数据库连接发生的不同数据库连接争用而发生锁定冲突。例如,如果其他数据库连接对数据库持有排它锁,那么接收此错误的数据库连接将无法读取或写入数据库文件的任何部分,除非它已启用read_uncommitted pragma。
SQLITE_LOCKED_SHARECACHE错误代码与SQLITE_BUSY错误代码非常类似,但SQLITE_LOCKED_SHARECACHE用于共享高速缓存的单独数据库连接,而SQLITE_BUSY用于不共享相同高速缓存的单独数据库连接的常见情况。此外,sqlite3_busy_handler() 和sqlite3_busy_timeout() 接口无助于解决SQLITE_LOCKED_SHAREDCACHE冲突。
(264) SQLITE_READONLY_RECOVERY
SQLITE_READONLY_RECOVERY错误代码是SQLITE_READONLY的扩展错误代码。SQLITE_READONLY_RECOVERY错误代码表示无法打开WAL模式数据库,因为数据库文件需要恢复,并且恢复需要写入权限,但只有读取权限可用。
(266) SQLITE_IOERR_READ
SQLITE_IOERR_READ错误代码是SQLITE_IOERR的扩展错误代码,用于指示尝试从磁盘上的文件读取时VFS层中的I / O错误。这个错误可能是由硬件故障引起的,也可能是文件打开时卸载文件系统造成的。
(267) SQLITE_CORRUPT_VTAB
SQLITE_CORRUPT_VTAB错误代码是虚拟表使用的SQLITE_CORRUPT的扩展错误代码。虚拟表可能会返回SQLITE_CORRUPT_VTAB以指示虚拟表中的内容已损坏。
(270) SQLITE_CANTOPEN_NOTEMPDIR
SQLITE_CANTOPEN_NOTEMPDIR错误代码不再使用。
(275) SQLITE_CONSTRAINT_CHECK
SQLITE_CONSTRAINT_CHECK错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示CHECK约束失败。
(283) SQLITE_NOTICE_RECOVER_WAL
当WAL模式数据库文件恢复时,SQLITE_NOTICE_RECOVER_WAL结果代码被传递给sqlite3_log()的回调函数。
(284) SQLITE_WARNING_AUTOINDEX
无论何时使用自动索引,SQLITE_WARNING_AUTOINDEX结果代码都会传递给sqlite3_log()的回调函数。这可以作为应用程序设计人员的警告,表明数据库可能受益于其他索引。
(516) SQLITE_ABORT_ROLLBACK
SQLITE_ABORT_ROLLBACK错误代码是SQLITE_ABORT的扩展错误代码,指示SQL语句因SQL语句首次启动时处于活动状态的事务回滚而中止。发生回滚时,挂起写入操作始终会失败,并显示此错误。只有在正在回滚的事务中更改了架构时,ROLLBACK才会导致挂起的读取操作失败。
(517) SQLITE_BUSY_SNAPSHOT
SQLITE_BUSY_SNAPSHOT错误代码是SQLITE_BUSY的扩展错误代码,当数据库连接尝试将读取事务提升为写入事务,但发现另一个数据库连接已写入数据库并因此使先前读取无效时,WAL模式数据库上发生SQLITE_BUSY。
以下情形说明了SQLITE_BUSY_SNAPSHOT错误可能会出现的方式:
- 进程A在数据库上启动一个读事务,并执行一个或多个SELECT语句。流程A保持交易处于开放状态。
- 进程B更新数据库,更改之前由进程A读取的值。
- 进程A现在尝试写入数据库。但是,流程A对数据库内容的看法现在已经过时,因为流程B在从流程A读取数据库文件后修改了数据库文件。因此进程A得到一个SQLITE_BUSY_SNAPSHOT错误。
(520) SQLITE_READONLY_CANTLOCK
- SQLITE_READONLY_CANTLOCK错误代码是SQLITE_READONLY的扩展错误代码。SQLITE_READONLY_CANTLOCK错误代码表示SQLite无法获取WAL模式数据库的读锁,因为与该数据库关联的共享内存文件是只读的。
(522) SQLITE_IOERR_SHORT_READ
SQLITE_IOERR_SHORT_READ错误代码是SQLITE_IOERR的扩展错误代码,指示VFS层中的读取尝试无法获取请求的字节数。这可能是由于截断的文件。
(526) SQLITE_CANTOPEN_ISDIR
SQLITE_CANTOPEN_ISDIR错误代码是SQLITE_CANTOPEN的扩展错误代码,指示文件打开操作失败,因为该文件实际上是目录。
(531) SQLITE_CONSTRAINT_COMMITHOOK
SQLITE_CONSTRAINT_COMMITHOOK错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示提交钩子回调返回非零,从而导致SQL语句回滚。
(539) SQLITE_NOTICE_RECOVER_ROLLBACK
当热日志回滚时,SQLITE_NOTICE_RECOVER_ROLLBACK结果代码被传递给sqlite3_log()的回调函数。
(776) SQLITE_READONLY_ROLLBACK
SQLITE_READONLY_ROLLBACK错误代码是SQLITE_READONLY的扩展错误代码。SQLITE_READONLY_ROLLBACK错误代码表示数据库无法打开,因为它有一个热日志需要回退,但不能打开,因为数据库是只读的。
(778) SQLITE_IOERR_WRITE
SQLITE_IOERR_WRITE错误代码是SQLITE_IOERR的扩展错误代码,指示在尝试写入磁盘上的文件时VFS层中发生I / O错误。这个错误可能是由硬件故障引起的,也可能是文件打开时卸载文件系统造成的。如果文件系统已满,则不应出现此错误,因为此时存在单独的错误代码(SQLITE_FULL)。
(782) SQLITE_CANTOPEN_FULLPATH
SQLITE_CANTOPEN_FULLPATH错误代码是SQLITE_CANTOPEN的扩展错误代码,指示文件打开操作失败,因为操作系统无法将文件名转换为完整路径名。
(787) SQLITE_CONSTRAINT_FOREIGNKEY
SQLITE_CONSTRAINT_FOREIGNKEY错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示外键约束失败。
(1032) SQLITE_READONLY_DBMOVED
SQLITE_READONLY_DBMOVED错误代码是SQLITE_READONLY的扩展错误代码。SQLITE_READONLY_DBMOVED错误代码表示数据库无法修改,因为数据库文件在打开后已被移动,所以如果由于回滚日志命名不正确而导致进程崩溃,则任何修改数据库的尝试都可能导致数据库损坏。
(1034) SQLITE_IOERR_FSYNC
SQLITE_IOERR_FSYNC错误代码是SQLITE_IOERR的扩展错误代码,用于指示VFS层中的I / O错误,同时尝试将之前写入的内容从OS和/或磁盘控制缓冲区中移出并存储到持久性存储中。换句话说,此代码表示unix中的fsync()系统调用或Windows中的FlushFileBuffers()系统调用有问题。
(1038) SQLITE_CANTOPEN_CONVPATH
SQLITE_CANTOPEN_CONVPATH错误代码是SQLITE_CANTOPEN的扩展错误代码,仅供Cygwin VFS使用,并且指示在尝试打开文件时cygwin_conv_path()系统调用失败。
(1043) SQLITE_CONSTRAINT_FUNCTION
SQLITE核心当前不使用SQLITE_CONSTRAINT_FUNCTION错误代码。但是,此错误代码可供扩展功能使用。
(1290) SQLITE_IOERR_DIR_FSYNC
SQLITE_IOERR_DIR_FSYNC错误代码是SQLITE_IOERR的扩展错误代码,用于在尝试调用目录上的fsync()时指示VFS层中的I / O错误。在创建或删除某些文件后,unix VFS会尝试fsync()目录,以确保这些文件在断电或系统崩溃后仍会出现在文件系统中。此错误代码指示尝试执行该fsync()的问题。
(1299) SQLITE_CONSTRAINT_NOTNULL
SQLITE_CONSTRAINT_NOTNULL错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示NOT NULL约束失败。
(1546) SQLITE_IOERR_TRUNCATE
SQLITE_IOERR_TRUNCATE错误代码是SQLITE_IOERR的扩展错误代码,用于指示在尝试将文件截断为较小大小时VFS层中的I / O错误。
(1555) SQLITE_CONSTRAINT_PRIMARYKEY
SQLITE_CONSTRAINT_PRIMARYKEY错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示PRIMARY KEY约束失败。
(1802) SQLITE_IOERR_FSTAT
SQLITE_IOERR_FSTAT错误代码是SQLITE_IOERR的扩展错误代码,指示在尝试调用文件中的fstat()(或等效文件)以确定信息(如文件大小或访问权限)时VFS层中的I / O错误。
(1811) SQLITE_CONSTRAINT_TRIGGER
SQLITE_CONSTRAINT_TRIGGER错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示触发触发器中的RAISE函数,导致SQL语句中止。
(2058) SQLITE_IOERR_UNLOCK
SQLITE_IOERR_UNLOCK错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_io_methods对象的xUnlock方法中的I / O错误。
(2067) SQLITE_CONSTRAINT_UNIQUE
SQLITE_CONSTRAINT_UNIQUE错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示UNIQUE约束失败。
(2314) SQLITE_IOERR_RDLOCK
SQLITE_IOERR_UNLOCK错误代码是SQLITE_IOERR的扩展错误代码,用于在尝试获取读锁时指示sqlite3_io_methods对象上的xLock方法中的I / O错误。
(2323) SQLITE_CONSTRAINT_VTAB
SQLITE核心当前不使用SQLITE_CONSTRAINT_VTAB错误代码。但是,此错误代码可供应用程序定义的虚拟表使用。
(2570) SQLITE_IOERR_DELETE
SQLITE_IOERR_UNLOCK错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_vfs对象上xDelete方法中的I / O错误。
(2579) SQLITE_CONSTRAINT_ROWID
SQLITE_CONSTRAINT_ROWID错误代码是SQLITE_CONSTRAINT的扩展错误代码,指示rowid不唯一。
(2826) SQLITE_IOERR_BLOCKED
SQLITE_IOERR_BLOCKED错误代码不再使用。
(3082) SQLITE_IOERR_NOMEM
SQLITE_IOERR_NOMEM错误代码有时由VFS层返回,以指示由于无法分配足够的内存而无法完成操作。在返回到应用程序之前,此错误代码通常由SQLite的更高层转换为SQLITE_NOMEM。
(3338) SQLITE_IOERR_ACCESS
SQLITE_IOERR_ACCESS错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_vfs对象上xAccess方法中的I / O错误。
(3594) SQLITE_IOERR_CHECKRESERVEDLOCK
SQLITE_IOERR_CHECKRESERVEDLOCK错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_io_methods对象上xCheckReservedLock方法中的I / O错误。
(3850) SQLITE_IOERR_LOCK
SQLITE_IOERR_LOCK错误代码是SQLITE_IOERR的扩展错误代码,用于指示咨询文件锁定逻辑中的I / O错误。通常,SQLITE_IOERR_LOCK错误表示获取PENDING锁定时出现问题。但是,它也可能指示Mac上使用的某些专用VFS上的其他锁定错误。
(4106) SQLITE_IOERR_CLOSE
SQLITE_IOERR_ACCESS错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_io_methods对象上xClose方法中的I / O错误。
(4362) SQLITE_IOERR_DIR_CLOSE
SQLITE_IOERR_DIR_CLOSE错误代码不再使用。
(4618) SQLITE_IOERR_SHMOPEN
SQLITE_IOERR_SHMOPEN错误代码是SQLITE_IOERR的扩展错误代码,用于在尝试打开新的共享内存段时指示sqlite3_io_methods对象上的xShmMap方法中的I / O错误。
(4874) SQLITE_IOERR_SHMSIZE
SQLITE_IOERR_SHMSIZE错误代码是SQLITE_IOERR的扩展错误代码,用于在尝试调整现有共享内存段的大小时指示sqlite3_io_methods对象上的xShmMap方法中的I / O错误。
(5130) SQLITE_IOERR_SHMLOCK
SQLITE_IOERR_SHMLOCK错误代码不再使用。
(5386) SQLITE_IOERR_SHMMAP
SQLITE_IOERR_SHMMAP错误代码是SQLITE_IOERR的扩展错误代码,用于在尝试将共享内存段映射到进程地址空间时指示sqlite3_io_methods对象上的xShmMap方法中的I / O错误。
(5642) SQLITE_IOERR_SEEK
SQLITE_IOERR_SEEK错误代码是SQLITE_IOERR的扩展错误代码,用于指示sqlite3_io_methods对象的xRead或xWrite方法中的I / O错误,同时尝试将文件描述符搜索到要读取或写入的文件的起始位置。
(5898) SQLITE_IOERR_DELETE_NOENT
SQLITE_IOERR_DELETE_NOENT错误代码是SQLITE_IOERR的扩展错误代码,指示sqlite3_vfs对象上的xDelete方法失败,因为要删除的文件不存在。
(6154) SQLITE_IOERR_MMAP
SQLITE_IOERR_MMAP错误代码是SQLITE_IOERR的扩展错误代码,指示在试图将部分数据库文件映射或取消映射到进程地址空间时,sqlite3_io_methods对象上的xFetch或xUnfetch方法中发生I / O错误。
(6410) SQLITE_IOERR_GETTEMPPATH
SQLITE_IOERR_GETTEMPPATH错误代码是SQLITE_IOERR的扩展错误代码,指示VFS无法确定放置临时文件的合适目录。
(6666) SQLITE_IOERR_CONVPATH
SQLITE_IOERR_CONVPATH错误代码是SQLITE_IOERR的扩展错误代码,仅供Cygwin VFS使用,并指示cygwin_conv_path()系统调用失败。另请参阅:SQLITE_CANTOPEN_CONVPATH
SQLite在公共领域。