SQLite 结果和错误代码
总览
SQLite C语言接口中的许多例程都返回数字结果代码,它们指示成功或失败,并且在失败的情况下,提供了一些导致失败的原因的想法。本文档致力于解释每个数字结果代码的含义。
1.结果代码与错误代码
“错误代码”是“结果代码”的子集,表示发生了问题。仅有少数几个非错误的结果代码: SQLITE_OK,SQLITE_ROW和SQLITE_DONE。术语“错误代码”表示除这三个以外的任何结果代码。
2.主要结果代码与扩展结果代码
结果代码是带符号的32位整数。结果代码的最低有效8位定义了一个宽泛的类别,称为“主要结果代码”。更高的有效位提供了有关错误的更详细的信息,称为“扩展结果代码”
请注意,主要结果代码始终是扩展结果代码的一部分。给定完整的32位扩展结果代码,应用程序始终仅可以通过提取扩展结果代码的最低有效8位来找到相应的主要结果代码。
所有扩展结果代码也是错误代码。因此,术语“扩展结果代码”和“扩展错误代码”是可以互换的。
为了实现历史兼容性,默认情况下,C语言接口返回主要结果代码。可以使用sqlite3_extended_errcode()接口检索最新错误的扩展结果代码。所述sqlite3_extended_result_codes()接口可用于把一个数据库连接到那里返回扩展结果代码,而不是主要结果代码的模式。
3.定义
所有结果代码均为整数。所有结果代码的符号名称都是使用sqlite3.h头文件中的“ #define”宏创建的。sqlite3.h头文件中有单独的部分,用于结果代码定义和扩展的结果代码定义。
主要结果代码符号名称的格式为“ SQLITE_XXXXXX”,其中XXXXXX是大写字母字符的序列。扩展结果代码名称的格式为“ SQLITE_XXXXXX_YYYYYYY”,其中XXXXXX部分是相应的主要结果代码,而YYYYYYY是对结果代码进行进一步分类的扩展名。
现有结果代码的名称和数值是固定且不变的。但是,新的结果代码,尤其是新的扩展结果代码,可能会出现在SQLite的未来版本中。
4.主要结果代码清单
$ nPrimCode结果代码在sqlite3.h中 定义,并按字母顺序在下面列出:
5.扩展结果代码列表
$ nExtCode扩展结果代码在sqlite3.h中定义,并按字母顺序在下面列出:
6.结果代码的含义
下面以数字顺序显示了所有$ nResCode结果代码值的含义。
(0)SQLITE_OK
SQLITE_OK结果代码表示操作成功,没有错误。大多数其他结果代码表示错误。
(1)SQLITE_ERROR
SQLITE_ERROR结果代码是通用错误代码,在没有其他更特定的错误代码可用时使用。
(2)SQLITE_INTERNAL
SQLITE_INTERNAL结果代码指示内部故障。在SQLite的有效版本中,应用程序永远不应看到此结果代码。如果应用程序确实遇到此结果代码,则表明数据库引擎中存在错误。
SQLite当前不生成此结果代码。但是,应用程序定义的SQL函数或 虚拟表,VFSes或其他扩展名可能导致返回此结果代码。
(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编译可用来,以帮助它处理SQLITE_BUSY错误进程B。
在事务中的任何时候都可能发生SQLITE_BUSY错误:首次启动事务时,任何写入或更新操作期间或事务提交时。为了避免在事务处理过程中遇到SQLITE_BUSY错误,应用程序可以使用BEGIN IMMEDIATE而不只是BEGIN来启动事务。将立即开始命令本身可能返回SQLITE_BUSY,但如果它成功,那么SQLite的保证,通过未来在同一个数据库上没有后续操作COMMIT 将返回SQLITE_BUSY。
另请参见: SQLITE_BUSY_RECOVERY和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()接口中断。另请参阅:SQLITE_ABORT
(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结果代码在两个上下文中使用。sqlite3_file_control()接口可以返回SQLITE_NOTFOUND,以指示基础VFS无法识别作为第三个参数传递的文件控件操作码。sqlite3_vfs对象的xSetSystemCall()方法也可以返回SQLITE_NOTFOUND 。
SQLite实现也在内部使用SQLITE_NOTFOUND结果代码,但是这些内部使用不会暴露给应用程序。
(13)SQLITE_FULL
SQLITE_FULL结果代码指示由于磁盘已满而无法完成写入。请注意,在尝试将信息写入主数据库文件时,可能会发生此错误,或者在写入临时磁盘文件时,也可能会发生此错误。
有时,即使存在大量的主磁盘空间,应用程序也会遇到此错误,因为在将临时文件存储在单独的分区上的系统上写入临时磁盘文件时,会发生该错误,而临时文件存储在比主磁盘少的空间上。
(14)SQLITE_CANTOPEN
SQLITE_CANTOPEN结果代码指示SQLite无法打开文件。有问题的文件可能是主数据库文件,也可能是几个临时磁盘文件之一。
(15)SQLITE_PROTOCOL
SQLITE_PROTOCOL结果代码指示SQLite使用的文件锁定协议有问题。当前仅在使用WAL模式并尝试启动新事务时返回SQLITE_PROTOCOL错误。当两个单独的数据库连接都尝试在WAL模式下同时启动事务时,可能会发生争用情况 。短暂的延迟后,比赛的失败者退回并重试。如果同一连接在几秒钟的时间内失去了数十次锁定竞争,它将最终放弃并返回SQLITE_PROTOCOL。实际上,SQLITE_PROTOCOL错误应该非常非常少地出现,并且只有当有许多单独的进程都在激烈竞争以写入同一数据库时才出现。
(16)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字节。可以在编译时使用SQLITE_MAX_SQL_LENGTH或在运行时使用sqlite3_limit(db,SQLITE_LIMIT_SQL_LENGTH等)设置SQL语句的最大长度。
(19)SQLITE_CONSTRAINT
SQLITE_CONSTRAINT错误代码表示在尝试处理SQL语句时发生了违反SQL约束的情况。有关失败约束的其他信息,可以通过查询附带的错误消息(通过sqlite3_errmsg()或 sqlite3_errmsg16()返回)或查看扩展的错误代码来找到。
SQLITE_CONSTRAINT代码也可以用作虚拟表实现的xBestIndex()方法的返回值。当xBestIndex()返回SQLITE_CONSTRAINT时,这表示提交到xBestIndex()的特定输入组合不能产生可用的查询计划,因此不应作进一步考虑。
(20)SQLITE_MISMATCH
SQLITE_MISMATCH错误代码指示数据类型不匹配。
SQLite通常非常宽容值类型与要存储该值的容器的声明类型之间的不匹配。例如,SQLite允许应用程序将大型BLOB存储在声明类型为BOOLEAN的列中。但是在少数情况下,SQLite对类型严格。在少数情况下,如果类型不匹配,则会返回SQLITE_MISMATCH错误。
表 的rowid必须为整数。尝试将rowid设置为 除整数(或NULL,它将自动转换为下一个可用的整数rowid)以外的任何值,将导致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
(25)SQLITE_RANGE
所述SQLITE_RANGE错误索引,参数号参数传递给之一sqlite3_bind例程或在一个列号sqlite3_column 例程是超出范围。
(26)SQLITE_NOTADB
尝试打开文件时,SQLITE_NOTADB错误指示正在打开的文件似乎不是SQLite数据库文件。
(27)SQLITE_NOTICE
任何C / C ++接口都不返回SQLITE_NOTICE结果代码。但是,有时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的可加载扩展很有用 。
(257)SQLITE_ERROR_MISSING_COLLSEQ
SQLITE_ERROR_MISSING_COLLSEQ结果代码表示无法准备SQL语句,因为找不到该SQL语句中命名的排序顺序。
有时,当遇到该错误代码时, sqlite3_prepare_v2()例程会将错误转换为 SQLITE_ERROR_RETRY,然后尝试使用不需要使用未知整理序列的其他查询计划来再次准备SQL语句。
(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编译指示。
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指示在一个I / O错误VFS层,而试图从磁盘上的文件中读取。该错误可能是由硬件故障引起的,或者是由于在打开文件时卸载了文件系统。
(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()的回调 。这可以向应用程序设计者发出警告,即数据库可能会从附加索引中受益。
(513)SQLITE_ERROR_RETRY
SQLITE_ERROR_RETRY在内部用于引发sqlite3_prepare_v2() (或其用于创建准备好的语句的同级例程之一),以再次尝试准备失败的语句,该语句在上一次尝试中出错。
(516)SQLITE_ABORT_ROLLBACK
SQLITE_ABORT_ROLLBACK错误代码是SQLITE_ABORT的扩展错误代码 ,指示SQL语句异常终止,因为该SQL语句首次启动时处于活动状态的事务已回滚。回滚发生时,挂起的写操作始终会因此错误而失败。一个ROLLBACK会导致如果模式是内正在推出交易回改变挂起的读操作只有失败。
(517)SQLITE_BUSY_SNAPSHOT
所述SQLITE_BUSY_SNAPSHOT错误代码是一个扩展的错误代码 为SQLITE_BUSY发生上WAL模式数据库,当数据库的连接尝试,以促进读事务成写事务但发现另一个数据库连接已经写入数据库并因此无效之前读取。
以下方案说明了如何发生SQLITE_BUSY_SNAPSHOT错误:
- 进程A在数据库上启动读取事务,并执行一个或多个SELECT语句。进程A使事务保持打开状态。
- 进程B更新数据库,更改以前由进程A读取的值。
- 现在,进程A尝试写入数据库。但是进程A对数据库内容的视图现在已过时,因为进程B从进程A读取数据库文件后已对其进行了修改。因此,进程A得到一个SQLITE_BUSY_SNAPSHOT错误。
(518)SQLITE_LOCKED_VTAB
SQLite核心不使用SQLITE_LOCKED_VTAB结果代码,但扩展程序可以使用它。虚拟表实现可以返回此结果代码以指示由于其他线程或进程持有的锁,它们无法完成当前操作。
当另一个准备好的语句正在主动读取R-Tree时,尝试更新R-Tree时 ,R-Tree扩展返回此结果代码。更新无法继续进行,因为对R-Tree的任何更改都可能涉及节点的重新组合和重新平衡,这将破坏读取游标,从而导致某些行被重复,而另一些行将被省略。
(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层无法为被请求以获得尽可能多的字节。这可能是由于文件被截断了。
(523)SQLITE_CORRUPT_SEQUENCE
SQLITE_CORRUPT_SEQUENCE结果代码表示sqlite_sequence表的架构已损坏。sqlite_sequence表用于帮助实现AUTOINCREMENT功能。sqlite_sequence表应采用以下格式:
创建表sqlite_sequence(name,seq);
如果SQLite发现sqlite_sequence表具有任何其他格式,它将返回SQLITE_CORRUPT_SEQUENCE错误。
(526)SQLITE_CANTOPEN_ISDIR
该SQLITE_CANTOPEN_ISDIR错误代码是一个扩展错误代码 为SQLITE_CANTOPEN表示文件打开操作失败,因为该文件实际上是目录。
(531)SQLITE_CONSTRAINT_COMMITHOOK
所述SQLITE_CONSTRAINT_COMMITHOOK错误代码是一个扩展的错误代码 为SQLITE_CONSTRAINT指示 commit钩子回调返回非零,如此造成被回滚的SQL语句。
(539)SQLITE_NOTICE_RECOVER_ROLLBACK
当热日志回滚时 ,SQLITE_NOTICE_RECOVER_ROLLBACK结果代码将传递到sqlite3_log()的回调 。
(769)SQLITE_ERROR_SNAPSHOT
当尝试通过使用sqlite3_snapshot_open()接口在数据库的历史版本上启动读取事务时,可能返回SQLITE_ERROR_SNAPSHOT结果代码。如果历史快照不再可用,则读取事务将失败,并显示SQLITE_ERROR_SNAPSHOT。仅当使用-DSQLITE_ENABLE_SNAPSHOT编译SQLite时,才可能出现此错误代码。
(776)SQLITE_READONLY_ROLLBACK
所述SQLITE_READONLY_ROLLBACK错误代码是一个扩展的错误代码 为SQLITE_READONLY。SQLITE_READONLY_ROLLBACK错误代码指示无法打开数据库,因为该数据库具有需要回滚的热日志,但由于数据库为只读而无法打开。
(778)SQLITE_IOERR_WRITE
所述SQLITE_IOERR_WRITE错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在一个I / O错误VFS层而试图写入到磁盘上的文件。该错误可能是由硬件故障引起的,或者是由于在打开文件时卸载了文件系统。如果文件系统已满,则不应发生此错误,因为有一个单独的错误代码(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指示在一个I / O错误VFS层而试图刷新先前写入的内容进行OS和/或磁盘的控制缓冲器,并进入持久存储。换句话说,此代码指示UNIX中的fsync()系统调用或Windows中的FlushFileBuffers()系统调用存在问题。
(1038)SQLITE_CANTOPEN_CONVPATH
该SQLITE_CANTOPEN_CONVPATH错误代码是一个扩展错误代码 为SQLITE_CANTOPEN只由Cygwin的VFS和指示cygwin_conv_path()系统调用,而试图打开一个文件失败。另请参阅:SQLITE_IOERR_CONVPATH
(1043)SQLITE_CONSTRAINT_FUNCTION
SQLite内核当前未使用SQLITE_CONSTRAINT_FUNCTION错误代码。但是,此错误代码可供扩展功能使用。
(1288)SQLITE_READONLY_CANTINIT
SQLITE_READONLY_CANTINIT结果代码源自VFS的xShmMap方法,以指示 存在WAL模式使用的共享内存区域,但是其内容对于当前进程而言是不可靠且无法使用的,因为当前进程对共享内存区域没有写权限。(用于WAL模式的共享内存区域通常是带有“ -wal”后缀的文件,该文件被映射到进程空间中。如果当前进程对该文件没有写权限,则它将无法写入共享内存。)
SQLite中的高级逻辑通常会拦截错误代码并创建一个临时的内存共享内存区域,以便当前进程至少可以读取数据库的内容。此结果代码不应到达应用程序接口层。
(1290)SQLITE_IOERR_DIR_FSYNC
所述SQLITE_IOERR_DIR_FSYNC错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在一个I / O错误VFS层,而上的目录试图调用FSYNC()。UNIX VFS在创建或删除某些文件后尝试对fsync()目录进行操作,以确保在断电或系统崩溃后,这些文件仍将出现在文件系统中。此错误代码指示尝试执行该fsync()的问题。
(1294)SQLITE_CANTOPEN_DIRTYWAL
目前不使用SQLITE_CANTOPEN_DIRTYWAL结果代码。
(1299)SQLITE_CONSTRAINT_NOTNULL
该SQLITE_CONSTRAINT_NOTNULL错误代码是一个扩展错误代码 为SQLITE_CONSTRAINT指示NOT NULL约束失败。
(1544)SQLITE_READONLY_DIRECTORY
SQLITE_READONLY_DIRECTORY结果代码指示数据库是只读的,因为进程无权在与数据库相同的目录中创建日志文件,并且创建日志文件是写入的前提条件。
(1546)SQLITE_IOERR_TRUNCATE
所述SQLITE_IOERR_TRUNCATE错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在一个I / O错误VFS层在尝试将文件截断到较小尺寸。
(1555)SQLITE_CONSTRAINT_PRIMARYKEY
所述SQLITE_CONSTRAINT_PRIMARYKEY错误代码是一个扩展的错误代码 为SQLITE_CONSTRAINT指示PRIMARY KEY约束失败。
(1802)SQLITE_IOERR_FSTAT
所述SQLITE_IOERR_FSTAT错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在一个I / O错误VFS层,同时为了确定的信息上的文件试图调用FSTAT()(或等价物),诸如文件大小或访问权限。
(1811)SQLITE_CONSTRAINT_TRIGGER
该SQLITE_CONSTRAINT_TRIGGER错误代码是一个扩展错误代码 为SQLITE_CONSTRAINT指示RAISE功能一个内触发开枪,导致SQL语句中止。
(2058)SQLITE_IOERR_UNLOCK
所述SQLITE_IOERR_UNLOCK错误代码是一个扩展的错误代码 为SQLITE_IOERR指示上xUnlock方法内的I / O错误sqlite3_io_methods对象。
(2067)SQLITE_CONSTRAINT_UNIQUE
所述SQLITE_CONSTRAINT_UNIQUE错误代码是一个扩展的错误代码 为SQLITE_CONSTRAINT指示UNIQUE约束失败。
(2314)SQLITE_IOERR_RDLOCK
所述SQLITE_IOERR_UNLOCK错误代码是一个扩展的错误代码 为SQLITE_IOERR指示XLOCK方法内的I / O错误在sqlite3_io_methods而试图得到一个读锁定对象。
(2323)SQLITE_CONSTRAINT_VTAB
SQLite内核当前未使用SQLITE_CONSTRAINT_VTAB错误代码。但是,此错误代码可供应用程序定义的虚拟表使用。
(2570)SQLITE_IOERR_DELETE
所述SQLITE_IOERR_UNLOCK错误代码是一个扩展的错误代码 为SQLITE_IOERR指示上xDelete方法内的I / O错误sqlite3_vfs对象。
(2579)SQLITE_CONSTRAINT_ROWID
所述SQLITE_CONSTRAINT_ROWID错误代码是一个扩展的错误代码 为SQLITE_CONSTRAINT指示ROWID不是唯一的。
(2826)SQLITE_IOERR_BLOCKED
(3082)SQLITE_IOERR_NOMEM
VFS 层 有时会返回SQLITE_IOERR_NOMEM错误代码,以指示由于无法分配足够的内存而无法完成操作。该错误代码通常在返回到应用程序之前由更高级别的SQLite 转换为SQLITE_NOMEM。
(3338)SQLITE_IOERR_ACCESS
所述SQLITE_IOERR_ACCESS错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在Xaccess文件方法内的I / O错误sqlite3_vfs对象。
(3594)SQLITE_IOERR_CHECKRESERVEDLOCK
所述SQLITE_IOERR_CHECKRESERVEDLOCK错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在xCheckReservedLock方法内的I / O错误sqlite3_io_methods对象。
(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指示在xClose方法内的I / O错误sqlite3_io_methods对象。
(4362)SQLITE_IOERR_DIR_CLOSE
不再使用SQLITE_IOERR_DIR_CLOSE错误代码。
(4618)SQLITE_IOERR_SHMOPEN
所述SQLITE_IOERR_SHMOPEN错误代码是一个扩展的错误代码 为SQLITE_IOERR指示xShmMap方法在内的I / O错误sqlite3_io_methods在尝试打开新的共享存储器段对象。
(4874)SQLITE_IOERR_SHMSIZE
所述SQLITE_IOERR_SHMSIZE错误代码是一个扩展的错误代码 为SQLITE_IOERR指示xShmMap方法在内的I / O错误sqlite3_io_methods而试图放大一个对象“SHM”文件作为其一部分 WAL模式事务处理。此错误可能表明基础文件系统卷空间不足。
(5130)SQLITE_IOERR_SHMLOCK
(5386)SQLITE_IOERR_SHMMAP
所述SQLITE_IOERR_SHMMAP错误代码是一个扩展的错误代码 为SQLITE_IOERR指示xShmMap方法在内的I / O错误sqlite3_io_methods而试图映射的共享存储器段到进程地址空间物体。
(5642)SQLITE_IOERR_SEEK
所述SQLITE_IOERR_SEEK错误代码是一个扩展的错误代码 为SQLITE_IOERR指示所述的xRead或xWrite方法内的I / O错误sqlite3_io_methods而试图寻求一个文件描述符到所读出或写入是发生在文件的开头点对象。
(5898)SQLITE_IOERR_DELETE_NOENT
所述SQLITE_IOERR_DELETE_NOENT错误代码是一个扩展的错误代码 为SQLITE_IOERR指示在所述xDelete方法sqlite3_vfs对象失败因为要删除的文件不存在。
(6154)SQLITE_IOERR_MMAP
所述SQLITE_IOERR_MMAP错误代码是一个扩展的错误代码 用于SQLITE_IOERR指示一个I / O错误内对所述xFetch或xUnfetch方法sqlite3_io_methods而试图映射或数据库文件到进程的地址空间的一部分去映射对象。
(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