總覽
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