非常教程

Sqlite参考手册

C界面 | C Interface

Result Values From A Query

const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
double sqlite3_column_double(sqlite3_stmt*, int iCol);
int sqlite3_column_int(sqlite3_stmt*, int iCol);
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
int sqlite3_column_type(sqlite3_stmt*, int iCol);

概要:

 
sqlite3_column_blob
→
BLOB result 


sqlite3_column_double
→
REAL result 


sqlite3_column_int
→
32-bit INTEGER result 


sqlite3_column_int64
→
64-bit INTEGER result 


sqlite3_column_text
→
UTF-8 TEXT result 


sqlite3_column_text16
→
UTF-16 TEXT result 


sqlite3_column_value
→
The result as an unprotected sqlite3_value object. 


 
 
 


sqlite3_column_bytes
→
Size of a BLOB or a UTF-8 TEXT result in bytes 



sqlite3_column_bytes16  
→ 
Size of UTF-16 TEXT in bytes 


sqlite3_column_type
→
Default datatype of the result 

细节:

这些例程返回有关查询当前结果行的单个列的信息。在任何情况下,第一个参数都是一个指向正在被评估的准备语句的指针(从sqlite3_prepare_v2()或其变体之一返回的sqlite3_stmt *),第二个参数是应该返回信息的列的索引。结果集的最左边一列的索引为0.结果中的列数可以使用sqlite3_column_count()来确定。

如果SQL语句当前不指向有效行,或者列索引​​超出范围,则结果未定义。这些例程只有在最近对sqlite3_step()的调用返回SQLITE_ROW并且随后调用sqlite3_reset()和sqlite3_finalize()时才会被调用。如果在sqlite3_reset()或sqlite3_finalize()之后或在sqlite3_step()返回SQLITE_ROW之外的其他任何这些例程之后调用,则结果是未定义的。如果从其他线程调用sqlite3_step()或sqlite3_reset()或sqlite3_finalize(),而这些例程中的任何一个都处于挂起状态,则结果是未定义的。

前六个接口(_blob,_double,_int,_int64,_text和_text16)每个以特定的数据格式返回结果列的值。如果结果列最初不是所请求的格式(例如,如果查询返回一个整数,但使用sqlite3_column_text()接口提取该值),则执行自动类型转换。

sqlite3_column_type()例程返回结果列的初始数据类型的数据类型代码。返回的值是SQLITE_INTEGER,SQLITE_FLOAT,SQLITE_TEXT,SQLITE_BLOB或SQLITE_NULL之一。sqlite3_column_type()的返回值可以用来决定应该使用前六个接口中的哪一个来提取列值。sqlite3_column_type()返回的值仅在没有针对有问题的值发生自动类型转换时才有意义。类型转换后,调用sqlite3_column_type()的结果是未定义的,尽管无害。未来版本的SQLite可能会在类型转换后改变sqlite3_column_type()的行为。

如果结果是BLOB或TEXT字符串,则可以使用sqlite3_column_bytes()或sqlite3_column_bytes16()接口来确定该BLOB或字符串的大小。

如果结果是BLOB或UTF-8字符串,则sqlite3_column_bytes()例程会返回该BLOB或字符串中的字节数。如果结果是UTF-16字符串,则sqlite3_column_bytes()将字符串转换为UTF-8,然后返回字节数。如果结果是数值,则sqlite3_column_bytes()使用sqlite3_snprintf()将该值转换为UTF-8字符串,并返回该字符串中的字节数。如果结果为NULL,则sqlite3_column_bytes()返回零。

如果结果是BLOB或UTF-16字符串,则sqlite3_column_bytes16()例程会返回该BLOB或字符串中的字节数。如果结果是UTF-8字符串,则sqlite3_column_bytes16()将字符串转换为UTF-16,然后返回字节数。如果结果是数字值,则sqlite3_column_bytes16()使用sqlite3_snprintf()将该值转换为UTF-16字符串,并返回该字符串中的字节数。如果结果为NULL,则sqlite3_column_bytes16()返回零。

sqlite3_column_bytes()和sqlite3_column_bytes16()返回的值不包含字符串末尾的零终止符。为了清楚起见,sqlite3_column_bytes()和sqlite3_column_bytes16()返回的值是字符串中的字节数,而不是字符数。

由sqlite3_column_text()和sqlite3_column_text16()返回的字符串,即使是空字符串,也始终以零终止。sqlite3_column_blob()对于零长度BLOB的返回值是一个NULL指针。

警告: sqlite3_column_value()返回的对象是未受保护的sqlite3_value对象。在多线程环境中,不受保护的sqlite3_value对象只能在sqlite3_bind_value()和sqlite3_result_value()中安全使用。如果以其他任何方式使用sqlite3_column_value()返回的未受保护的sqlite3_value对象(包括对例如sqlite3_value_int(),sqlite3_value_text()或sqlite3_value_bytes())的例程调用,则行为不是线程安全的。因此,sqlite3_column_value()接口通常只在应用程序定义的SQL函数或虚拟表的实现中有用,而不在顶层应用程序代码中。

这些例程可能会尝试转换结果的数据类型。例如,如果内部表示形式为FLOAT,并且请求了文本结果,则会在内部使用sqlite3_snprintf()自动执行转换。下表详细列出了所应用的转换:

InternalType请求的类型转换NULL INTEGER结果为0 NULL FLOAT结果为0.0 NULL TEXT结果为NULL指针NULL BLOB结果为NULL指针INTEGER FLOAT从整数转换为float INTEGER TEXT整数的ASCII呈现INTEGER BLOB与INTEGER-> TEXT相同FLOAT INTEGER CAST到INTEGER FLOAT TEXT FLOAT BLOB CAST到BLOB的ASCII呈现TEXT INTEGER CAST到INTEGER TEXT FLOAT CAST到REAL TEXT BLOB没有改变BLOB INTEGER CAST到INTEGER BLOB FLOAT CAST到REAL BLOB TEXT如果需要添加一个零终止符

请注意,当发生类型转换时,先前调用sqlite3_column_blob(),sqlite3_column_text()和/或sqlite3_column_text16()的指针可能失效。在下列情况下可能会发生类型转换和指针失效:

  • 初始内容是一个BLOB,并调用sqlite3_column_text()或sqlite3_column_text16()。可能需要将零终结符添加到字符串中。
  • 初始内容是UTF-8文本和sqlite3_column_bytes16()或sqlite3_column_text16()被调用。内容必须转换为UTF-16。
  • 初始内容是UTF-16文本和sqlite3_column_bytes()或sqlite3_column_text()被调用。内容必须转换为UTF-8。

UTF-16be和UTF-16le之间的转换总是在原地完成,并且不会使先前的指针无效,当然前面的指针所引用的缓冲区的内容将被修改。其他类型的转换可以在适当的地方完成,但有时它们是不可能的,并且在那些情况下先前的指针被无效。

最安全的策略是以下列方式之一调用这些例程:

  • sqlite3_column_text()后跟sqlite3_column_bytes()
  • sqlite3_column_blob()后跟sqlite3_column_bytes()
  • sqlite3_column_text16()后面跟着sqlite3_column_bytes16()

换句话说,您应该首先调用sqlite3_column_text(),sqlite3_column_blob()

或sqlite3_column_text16()以强制结果为所需的格式,然后调用sqlite3_column_bytes()或sqlite3_column_bytes16()来查找结果的大小。请勿将调用与sqlite3_column_text()或sqlite3_column_blob()调用并调用sqlite3_column_bytes16(),也不要将调用与调用sqlite3_column_bytes()的sqlite3_column_text16()混合使用。

返回的指针是有效的,直到如上所述发生类型转换,或者直到调用sqlite3_step()或sqlite3_reset()或sqlite3_finalize()为止。用于保存字符串和BLOB的内存空间会自动释放。不要将从sqlite3_column_blob(),sqlite3_column_text()等返回的指针传递到sqlite3_free()。

如果在评估任何这些例程时发生内存分配错误,则返回一个默认值。默认值是整数0,浮点数0.0或NULL指针。随后调用sqlite3_errcode()将返回SQLITE_NOMEM。

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