非常教程

Sqlite参考手册

C界面 | C Interface

Opening A New Database Connection

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
int sqlite3_open16(
  const void *filename,   /* Database filename (UTF-16) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
int sqlite3_open_v2(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb,         /* OUT: SQLite db handle */
  int flags,              /* Flags */
  const char *zVfs        /* Name of VFS module to use */
);

这些例程按照filename参数指定的方式打开SQLite数据库文件。对于sqlite3_open16(),文件名参数被解释为sqlite3_open()和sqlite3_open_v2()的UTF-8,以及本地字节顺序的UTF-16。数据库连接句柄通常以* ppDb的形式返回,即使发生错误。唯一的例外是,如果SQLite无法分配内存来保存sqlite3对象,则NULL将被写入* ppDb而不是指向sqlite3对象的指针。如果数据库成功打开(和/或创建),则返回SQLITE_OK。否则,返回一个错误代码。可以使用sqlite3_errmsg()或sqlite3_errmsg16()例程来获取任何sqlite3_open()例程失败后错误的英文描述。

对于使用sqlite3_open()或sqlite3_open_v2()创建的数据库,默认编码为UTF-8。使用sqlite3_open16()创建的数据库的默认编码将以本机字节顺序为UTF-16。

无论打开时是否发生错误,都应该释放与数据库连接句柄关联的资源,方法是在不再需要时将其传递给sqlite3_close()。

sqlite3_open_v2()接口的工作原理与sqlite3_open()类似,不同之处在于它接受两个额外的参数来额外控制新的数据库连接。sqlite3_open_v2()的flags参数可以接受以下三个值之一,可以选择与SQLITE_OPEN_NOMUTEX,SQLITE_OPEN_FULLMUTEX,SQLITE_OPEN_SHAREDCACHE,SQLITE_OPEN_PRIVATECACHE和/或SQLITE_OPEN_URI标志组合使用:

SQLITE_OPEN_READONLY数据库以只读模式打开。如果数据库尚不存在,则会返回错误.SQLITE_OPEN_READWRIT如果可能,打开数据库进行读取和写入操作,或者仅在操作系统对文件进行写保护时才读取数据库。无论哪种情况,数据库都必须已经存在,否则会返回错误.SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATEThe打开数据库以进行读写操作,并在数据库尚不存在时创建。这是始终用于sqlite3_open()和sqlite3_open16()的行为。

如果sqlite3_open_v2()的第三个参数不是上面显示的组合之一(可选地与其他SQLITE_OPEN_ *位组合),那么行为是未定义的。

如果设置了SQLITE_OPEN_NOMUTEX标志,那么只要在编译时或开始时尚未设置单线程模式,数据库连接就会以多线程线程模式打开。如果设置了SQLITE_OPEN_FULLMUTEX标志,则数据库连接将以串行化线程模式打开,除非先前在编译时或启动时选择了单线程。无论使用sqlite3_enable_shared_cache()是否启用共享缓存,SQLITE_OPEN_SHAREDCACHE标志都会导致数据库连接有资格使用共享缓存模式。即使启用了SQLITE_OPEN_PRIVATECACHE标志,数据库连接也不会参与共享缓存模式。

sqlite3_open_v2()的第四个参数是定义新数据库连接应使用的操作系统接口的sqlite3_vfs对象的名称。如果第四个参数是一个NULL指针,那么使用默认的sqlite3_vfs对象。

如果文件名为“:memory:”,则为该连接创建一个专用的临时内存数据库。当数据库连接关闭时,这个内存数据库将会消失。未来版本的SQLite可能会使用以“:”字符开头的其他特殊文件名。建议当数据库文件名实际上以“:”字符开始时,应该在文件名前添加一个路径名,例如“./”以避免含糊不清。

如果文件名是空字符串,则将创建一个专用的临时磁盘数据库。一旦数据库连接关闭,该私有数据库将自动删除。

URI文件名

如果启用了URI文件名解释,并且文件名参数以“file:”开头,则文件名将被解释为URI。如果SQLITE_OPEN_URI标志在sqlite3_open_v2()的第三个参数中设置,或者已通过sqlite3_config()方法或SQLITE_USE_URI编译时选项使用SQLITE_CONFIG_URI选项全局启用,则启用URI filename解释。默认情况下URI文件解释是关闭的,但未来版本的SQLite可能默认启用URI文件名解释。有关更多信息,请参阅“URI文件名”。

根据RFC 3986分析URI文件名。如果URI包含权限,则它必须是空字符串或字符串“localhost”。如果权限不是空字符串或“localhost”,则会向调用方返回错误。URI的片段组件(如果存在)将被忽略。

SQLite使用URI的路径组件作为包含数据库的磁盘文件的名称。如果路径以“/”字符开头,则将其解释为绝对路径。如果路径不是以'/'开头(这意味着从URI中省略了授权部分),那么路径被解释为相对路径。在Windows上,绝对路径的第一个组件是驱动器规范(例如“C:”)。

URI的查询组件可能包含由SQLite本身或通过自定义VFS实现解释的参数。SQLite及其内置的VFS解释了以下查询参数:

  • vfs:“vfs”参数可用于指定提供操作系统界面的VFS对象的名称,该界面应用于访问磁盘上的数据库文件。如果此选项设置为空字符串,则使用默认的VFS对象。指定未知的VFS是一个错误。如果使用sqlite3_open_v2()并且存在vfs选项,则该选项指定的VFS优先于作为sqlite3_open_v2()的第四个参数传递的值。
  • 模式:模式参数可以设置为“ro”,“rw”,“rwc”或“memory”。尝试将其设置为任何其他值都是错误。如果指定了“ro”,那么数据库将以只读访问方式打开,就好像在sqlite3_open_v2()的第三个参数中设置了SQLITE_OPEN_READONLY标志一样。如果mode选项设置为“rw”,那么打开数据库进行读写(但不是创建)访问,就好像设置了SQLITE_OPEN_READWRITE(但不是SQLITE_OPEN_CREATE)一样。值“rwc”等同于设置SQLITE_OPEN_READWRITE和SQLITE_OPEN_CREATE。如果模式选项设置为“内存”,则使用永不从磁盘读取或写入的纯内存数据库。
  • 缓存:缓存参数可以设置为“共享”或“私人”。将它设置为“共享”相当于在传递给sqlite3_open_v2()的flags参数中设置SQLITE_OPEN_SHAREDCACHE位。将缓存参数设置为“private”等同于设置SQLITE_OPEN_PRIVATECACHE位。如果使用sqlite3_open_v2()并且在URI文件名中存在“cache”参数,则其值将覆盖通过设置SQLITE_OPEN_PRIVATECACHE或SQLITE_OPEN_SHAREDCACHE标志所请求的任何行为。
  • psow:psow参数指示powersafe覆盖属性是否适用于数据库文件所在的存储介质。
  • nolock:nolock参数是一个布尔查询参数,如果设置为禁用回滚日志模式下的文件锁定。这对于访问不支持锁定的文件系统上的数据库很有用。小心:如果两个或更多进程写入同一个数据库,并且其中任何一个进程使用nolock = 1,则可能导致数据库损坏。
  • immutable:不可变参数是一个布尔型查询参数,表示数据库文件存储在只读介质上。当设置不可变时,SQLite会假定数据库文件不能更改,即使是具有更高特权的进程也是如此,因此数据库以只读方式打开,并且禁用所有锁定和更改检测。警告:在实际上更改的数据库文件上设置不可变属性可能会导致错误的查询结果和/或SQLITE_CORRUPT错误。另请参阅:SQLITE_IOCAP_IMMUTABLE。

在URI的查询组件中指定未知参数不是错误。未来版本的SQLite可能会理解其他查询参数。有关更多信息,请参阅“对SQLite有特殊意义的查询参数”。

URI文件名示例

URI文件名

结果

文件:data.db

打开当前目录中的文件“data.db”。

file:/home/fred/data.db file:///home/fred/data.db file://localhost/home/fred/data.db

打开数据库文件“/home/fred/data.db”。

文件://darkstar/home/fred/data.db

一个错误。“darkstar”不是公认的权威。

文件:/// C:/Documents%20and%20Settings/fred/Desktop/data.db

仅Windows:在驱动器C:上的fred桌面上打开文件“data.db”。请注意,在此示例中转义%20不是严格必要的 - 空格字符可以在URI文件名中逐字使用。

file:data.db?mode = ro&cache = private

在当前目录中打开文件“data.db”以进行只读访问。无论默认情况下是否启用共享缓存模式,都使用私有缓存。

文件:/home/fred/data.db VFS = UNIX的dotfile

打开文件“/home/fred/data.db”。使用特殊的VFS“unix-dotfile”,它使用点文件代替POSIX咨询锁定。

文件:data.db模式=只读

一个错误。“只读”不是“模式”参数的有效选项。

URI的十六进制转义序列(%HH)在URI的路径和查询组件中受支持。一个十六进制转义序列由一个百分号 - "%" -组成,后面紧跟着两个十六进制数字,指定一个八位字节值。在解释URI文件的路径或查询组件之前,它们使用UTF-8进行编码,并将所有十六进制转义序列替换为包含相应八位组的单个字节。如果此进程生成无效的UTF-8编码,则结果未定义。

Windows用户注意:用于sqlite3_open()和sqlite3_open_v2()的filename参数的编码必须是UTF-8,而不是当前定义的任何代码页。包含国际字符的文件名必须在将它们传递到sqlite3_open()或sqlite3_open_v2()之前转换为UTF-8。

Windows运行时用户的注意事项:必须在调用sqlite3_open()或sqlite3_open_v2()之前设置临时目录。否则,需要使用临时文件的各种功能可能会失败。

C界面 | C Interface相关

1.64-Bit Integer Types
2.A Handle To An Open BLOB
3.An Introduction To The SQLite C/C++ Interface
4.Application Defined Page Cache
5.Attempt To Free Heap Memory
6.Authorizer Action Codes
7.Authorizer Return Codes
8.Automatically Load Statically Linked Extensions
9.Binding Values To Prepared Statements
10.C/C++ Interface For SQLite Version 3
11.C/C++ Interface For SQLite Version 3 (old)
12.Cancel Automatic Extension Loading
13.Checkpoint a database
14.Checkpoint Mode Values
15.Close A BLOB Handle
16.Closing A Database Connection
17.Collation Needed Callbacks
18.Column Names In A Result Set
19.Commit And Rollback Notification Callbacks
20.Compare the ages of two snapshot handles
21.Compile-Time Authorization Callbacks
22.Compile-Time Library Version Numbers
23.Compiling An SQL Statement
24.Configuration Options
25.Configure an auto-checkpoint
26.Configure database connections
27.Configuring The SQLite Library
28.Conflict resolution modes
29.Constants Defining Special Destructor Behavior
30.Convenience Routines For Running Queries
31.Copy And Free SQL Values
32.Count The Number Of Rows Modified
33.Create Or Redefine SQL Functions
34.Custom Page Cache Object
35.Data Change Notification Callbacks
36.Database Connection Configuration Options
37.Database Connection For Functions
38.Database Connection Handle
39.Database Connection Status
40.Database Snapshot
41.Declare The Schema Of A Virtual Table
42.Declared Datatype Of A Query Result
43.Define New Collating Sequences
44.Deprecated Functions
45.Deprecated Soft Heap Limit Interface
46.Destroy A Prepared Statement Object
47.Destroy a snapshot
48.Determine if a database is read-only
49.Determine If A Prepared Statement Has Been Reset
50.Determine If An SQL Statement Is Complete
51.Determine If An SQL Statement Writes The Database
52.Determine The Virtual Table Conflict Policy
53.Device Characteristics
54.Dynamically Typed Value Object
55.Enable Or Disable Extended Result Codes
56.Enable Or Disable Extension Loading
57.Enable Or Disable Shared Pager Cache
58.Error Codes And Messages
59.Error Logging Interface
60.Evaluate An SQL Statement
61.Experimental Interfaces
62.Extended Result Codes
63.Extract Metadata About A Column Of A Table
64.File Locking Levels
65.Find The Database Handle Of A Prepared Statement
66.Find the next prepared statement
67.Finding The Subtype Of SQL Values
68.Flags For File Open Operations
69.Flags for the xAccess VFS method
70.Flags for the xShmLock VFS method
71.Flush caches to disk mid-transaction
72.Formatted String Printing Functions
73.Free Memory Used By A Database Connection
74.Function Auxiliary Data
75.Function Flags
76.Fundamental Datatypes
77.Impose A Limit On Heap Size
78.Index Of A Parameter With A Given Name
79.Initialize The SQLite Library
80.Interrupt A Long-Running Query
81.Introduction
82.Last Insert Rowid
83.List Of SQLite Constants
84.List Of SQLite Functions
85.List Of SQLite Objects
86.Load An Extension
87.Loadable Extension Thunk
88.Low-Level Control Of Database Files
89.Low-level system error code
90.Maximum xShmLock index
91.Memory Allocation Routines
92.Memory Allocation Subsystem
93.Memory Allocator Statistics
94.Move a BLOB Handle to a New Row
95.Mutex Handle
96.Mutex Methods Object
97.Mutex Types
98.Mutex Verification Routines
99.Mutexes
100.Name Of A Host Parameter
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