SQLite3数据库

一、SQL语法
数据定义(DDL):用户定义、删除和修改数据模式
数据查询(DQL):用于查询数据
数据操纵(DML):用于增、删、改数据
数据控制(DCL):用于控制数据访问权限
在这里插入图片描述
二、SQLite3数据类型:
存储类 描述
NULL 值是一个 NULL 值。
INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
BLOB 值是一个 blob 数据,完全根据它的输入存储。
SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型

Boolean 数据类型
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

Date 与 Time 数据类型
SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

存储类 日期格式
TEXT 格式为 “YYYY-MM-DD HH:MM:SS.SSS” 的日期。
REAL 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。
INTEGER 从 1970-01-01 00:00:00 UTC 算起的秒数。

三、基本语句
创建:
create table episodes (id integer primary key, season int, name text );
create table foods(id integer primary key,type_id integer, name text );
create table food_types(id integer primary key, name text );
create table foods_episodes(food_id integer, episode_id integer );

修改表
ALTER TABLE table { RENAME TO name | ADD COLUMN column_def }

查询:
简单查询
多表连接查询
合并多个结果集
SELECT INTO
使用TOP限制结果集
子查询

SELECT <目标列名序列>
FROM <数据源>
[WHERE <检索条件表达式>]
[GROUP BY <分组依据列>]
[HAVING <分组提取条件>]
[ORDER BY <排序依据列>]
字符匹配:
一般形式为: 列名 [NOT ] LIKE 匹配串
作用:查找指定列名与匹配串常量匹配的元组。
匹配串类型:匹配串可以是字符串常量,也可以含有通配符。
通配符种类:
%(百分号):匹配0个或多个字符。
_(下划线):匹配一个字符。
[ ]:匹配括号中的字符
[∧ ]:不匹配括号中的字符

对查询结果进行排序的子句为:
ORDER BY <列名> [<列名> … ] [ASC | DESC ]

说明:按<列名>进行升序(ASC)或降序(DESC)排序。

SQL提供的计算函数
COUNT(*):统计表中元组个数
COUNT(<列名>):统计本列非空列值个数
SUM(<列名>):计算列值总和(必须是数值型列)
AVG(<列名>):计算列值平均值(必须是数值型列)
MAX(<列名>):求列值最大值
MIN(<列名>):求列值最小值

插入:
语法格式如下:
INSERT [ INTO]
table_name
{ [ ( column_list ) ]
{ VALUES
( { expression } [ ,…n] )
}
}

修改数据:
Update <表名>
Set <列名>=<表达式>[{, <列名>=<表达式>}] Set 列名 表达式 [{, 列名 表达式 }] [Where <条件>]

删除数据:
Delete From <表名>[Where <条件>]

四、C API
1.
int sqlite3_open(const char* fileName, sqlite3** ppDB);
函数功能:打开一个数据库;若该数据库文件不存在,则自动创建。打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行。
输入参数:fileName,待打开的数据库文件名称,包括路径,以’\0’结尾; 特别说明:SQLite 支持内存数据库,内存方式存储使用文件名“:memory:”
输出参数:ppDB,返回打开的数据库句柄;
返回值:执行成功返回SQLITE_OK,否则返回其他值;

const char sqlite3_errmsg(sqlite3 pDB);
函数功能:获取最近调用的API 接口返回的错误说明,这些错误信息UTF-8的编码返回,并且在下一次调用任何SQLite API 函数时被自动清除;
输入参数:pDB,打开的数据库句柄
输出参数: 无
返回值:错误说明的字符串指针

int sqlite3_errcode(sqlite3* pDB);
函数功能:获取最近调用的API 接口返回的错误代码;
输入参数:pDB,打开的数据库句柄
输出参数: 无
返回值:错误代码

int sqlite3_exec(sqlite3* pDB, const char sql, sqlite_callback callback, voidpara, char** errMsg);
函数功能:编译和执行零个或多个SQL 语句,查询的结果返回给回调函数callback
输入参数:pDB,数据库句柄;sql,待执行的SQL 语句字符串,以’\0’结尾;callback,回调函数,用来处理查询结果,如果不需要回调(比如做insert 或者delete 操作时),可以输入NULL;para,用户传入的参数,可以为NULL,该参数指针最终会被传给回调函数callback,供用户在回调函数中使用;
输出参数:errMsg,返回错误信息,注意是指针的指针。
返回值:执行成功返回SQLITE_OK,否则返回其他值

回调函数sqlite_callback介绍
typedef int (sqlite_callback)(void para,int columnCount,char** columnValue,char** columnName);
函数功能:由用户处理查询的结果
输入参数:para,从sqlite3_exec()传入的参数指针;columnCount, 查询到的这一条记录有多少个字段(即这条记录有多少列);columnValue,查询出来的数据都保存在这里,它实际上是个1 维数组(不要以为是2 维数组),每一个元素都是一个char * 值,是一个字段内容(用字符串来表示,以‘\0’结尾);columnName,与columnValue 是对应的,表示这个字段的字段名称。
输出参数:无
返回值:执行成功返回SQLITE_OK,否则返回其他值

int sqlite3_get_table(sqlite3* pDB, const char *sql,char *pResult, int * rowCount,int * columnCount, char errMsg);
函数功能:执行SQL 语句,通过一维数组返回结果;一般用于数据记录查询
输入参数:pDB,打开的数据库句柄;sql,待执行的SQL 字符串,以’\0’结尾;
输出参数:rowCount,查询出多少条记录(即查出多少行);columnCount,查询出来的记录有多少个字段(多少列); errMsg,返回错误信息;pResult,查询结果,是由字符串组成的一维数组(不要以为是二维数组,更不要以为是三维数组)。它的内存布局是:第一行是字段名称,后面紧接着每个字段的值;
返回值:执行成功返回SQLITE_OK,否则返回其他值.

void sqlite3_free_table(char **result);
函数功能:释放查询结果占用的内存;
输入参数:result,通过函数sqlite3_get_table()查询到的记录结果
输出参数:无
返回值:无

int sqlite3_prepare(sqlite3* pDB, const char* sql , int maxSqlLen,sqlite3_stmt** ppStmt, const char**pTail);
函数功能:将SQL 语句编译成SQLite 能够识别的二进制字节码(也即SQL声明,statement),结果保存在ppStat 中。注:输入的参数中只有第一个SQL语句会被编译。SQL 语句间通过分号‘;’分隔。
输入参数:pDB ,数据库句柄;sql ,待编译的SQL 语句字符串;
maxSqlLen,SQL 语句的最大长度,如果此值小于0,SQLite 会自动计算字符串长度;
输出参数:ppStmt,编译后SQL 语句存放位置;pTail,未编译的SQL 语句的起始位置,一般输入NULL 就可以了。
返回值:执行成功返回SQLITE_OK,否则返回其他值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值