非常教程

Sqlite参考手册

其他 | Miscellaneous

Result and Error Codes

1.结果代码与错误代码

2.主要结果代码与扩展结果代码

3.定义

4.主要结果代码列表

5.扩展结果代码列表

6.结果代码意义

Overview

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版本中。

$ 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)

$ 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)

所有$ 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在公共领域。

其他 | Miscellaneous相关

1.35% Faster Than The Filesystem
2.8+3 Filenames
3.An Asynchronous I/O Module For SQLite
4.Appropriate Uses For SQLite
5.Architecture of SQLite
6.Atomic Commit In SQLite
7.Automatic Undo/Redo With SQLite
8.Benefits of SQLite As A File Format
9.Change in Default Page Size in SQLite Version 3.12.0
10.Clustered Indexes and the WITHOUT ROWID Optimization
11.Compile-time Options
12.Constraint Conflict Resolution in SQLite
13.Custom Builds Of SQLite
14.Deterministic SQL Functions
15.Distinctive Features Of SQLite
16.EXPLAIN QUERY PLAN
17.Features Of SQLite
18.File Format Changes in SQLite
19.Full-Featured SQL
20.High Reliability
21.Hints for Debugging SQLite
22.How SQLite Is Tested
23.How To Compile SQLite
24.How To Download Canonical SQLite Source Code
25.Imposter Tables
26.In-Memory Databases
27.Indexes On Expressions
28.Internal Versus External BLOBs
29.Isolation In SQLite
30.Long Term Support
31.Maintaining Private Branches Of SQLite
32.Many Small Queries Are Efficient In SQLite
33.Measuring and Reducing CPU Usage in SQLite
34.Memory-Mapped I/O
35.NULL Handling in SQLite
36.Partial Indexes
37.Pointer Passing Interfaces
38.Powersafe Overwrite
39.Release History Of SQLite
40.Row Values
41.Rowid Tables
42.Run-Time Loadable Extensions
43.SQL Features That SQLite Does Not Implement
44.sqldiff.exe: Database Difference Utility
45.SQLite As An Application File Format
46.SQLite Autoincrement
47.SQLite Backup API
48.SQLite Changes From Version 3.4.2 To 3.5.0
49.SQLite Changes From Version 3.5.9 To 3.6.0
50.SQLite Database Speed Comparison
51.SQLite File IO Specification
52.SQLite Frequently Asked Questions
53.SQLite In 5 Minutes Or Less
54.SQLite is a Self Contained System
55.SQLite Is Serverless
56.SQLite Is Transactional
57.SQLite Library Footprint
58.SQLite Shared-Cache Mode
59.SQLite Unlock-Notify API
60.SQLite Version 3 Overview
61.SQLite: Single File Database
62.Temporary Files Used By SQLite
63.TH3
64.The COMPLETION() Table-Valued Function
65.The CSV Virtual Table
66.The dbhash.exe Utility Program
67.The DBSTAT Virtual Table
68.The Error And Warning Log
69.The generate_series Table-Valued Function
70.The OS Backend (VFS) To SQLite
71.The Spellfix1 Virtual Table
72.The SQLite Amalgamation
73.The SQLite Bytecode Engine
74.The sqlite3_analyzer.exe Utility Program
75.The SQLITE_STMT Virtual Table
76.The UNION Virtual Table
77.The Virtual Database Engine of SQLite
78.Uniform Resource Identifiers
79.Using SQLite In Multi-Threaded Applications
80.Version Numbers in SQLite
81.What If OpenDocument Used SQLite?
82.Why Is SQLite Coded In C
83.Zero-Configuration
Sqlite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来

主页 https://sqlite.org/
源码 https://www.sqlite.org/src/
发布版本 3.21.0

Sqlite目录

1.C界面 | C Interface
2.C Interface: Session Module
3.CLI
4.数据库文件表 | Database File Format
5.数据类 | Datatypes
6.动态内存分配 | Dynamic Memory Allocation
7.外键约束 | Foreign Key Constraints
8.全文索引 | Full-Text Search
9.损坏方式 | How To Corrupt
10.JSON
11.语言 | Language
12.局限性 | Limits
13.锁定和并发 | Locking and Concurrency
14.其他 | Miscellaneous
15.PRAGMA Statements
16.查询计划程序 | Query Planner
17.R*Tree Module
18.RBU Extension
19.语法图 | Syntax Diagrams
20.Tcl Interface
21.虚拟表机制 | Virtual Table Mechanism
22.预写日志 | Write-Ahead Logging
23.SQL 教程
24.SQL 简介
25.SQL 语法
26.SQL DELETE 语句
27.SQL UPDATE 语句
28.SQL NOT NULL 约束
29.SQL 约束
30.SQL CREATE TABLE 语句
31.SQL CREATE DATABASE 语句
32.SQL INSERT INTO SELECT 语句
33.SQL SELECT INTO 语句
34.SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
35.SQL AUTO INCREMENT 字段
36.SQL ALTER TABLE 语句
37.SQL 撤销索引、表以及数据库
38.SQL CREATE INDEX 语句
39.SQL DEFAULT 约束
40.SQL CHECK 约束
41.SQL FOREIGN KEY 约束
42.SQL PRIMARY KEY 约束
43.SQL UNIQUE 约束
44.SQL 通用数据类型
45.SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
46.SQL NULL 值 – IS NULL 和 IS NOT NULL
47.SQL Server 和 MySQL 中的 Date 函数
48.SQL MS Access、MySQL 和 SQL Server 数据类型
49.SQL 函数
50.SQL 总结
51.SQL 主机
52.SQL 快速参考
53.SQL ROUND() 函数
54.SQL Server GETDATE() 函数
55.MySQL DATE_FORMAT() 函数
56.MySQL DATEDIFF() 函数
57.MySQL DATE_SUB() 函数
58.MySQL DATE_ADD() 函数
59.MySQL EXTRACT() 函数
60.MySQL DATE() 函数
61.MySQL CURTIME() 函数
62.MySQL CURDATE() 函数
63.MySQL NOW() 函数
64.SQL Server CONVERT() 函数
65.SQL Server DATEDIFF() 函数
66.SQL Server DATEADD() 函数
67.SQL Server DATEPART() 函数
68.SQLite 命令
69.SQLite 安装
70.SQLite 简介
71.SQLite 运算符
72.SQLite Select 语句
73.SQLite 删除表
74.SQLite 创建表
75.SQLite Insert 语句
76.SQLite 分离数据库
77.SQLite 附加数据库
78.SQLite 创建数据库
79.SQLite 数据类型
80.SQLite 语法
81.SQLite Order By
82.SQLite Limit 子句
83.SQLite Glob 子句
84.SQLite Like 子句
85.SQLite Delete 语句
86.SQLite Update 语句
87.SQLite AND/OR 运算符
88.SQLite Where 子句
89.SQLite 表达式
90.SQLite Distinct 关键字
91.SQLite Having 子句
92.SQLite Group By
93.SQLite Join
94.SQLite 约束
95.SQLite PRAGMA
96.SQLite 事务
97.SQLite 视图
98.SQLite Truncate Table
99.SQLite Alter 命令
100.SQLite Indexed By