基本操作
注意编译时需要加上的头文件及指令
头文件:#include <stdlib.h>
编译指令·: gcc 文件名.c -lsqlite3
插入数据:
在数据表中插入所有数据(参数需齐全)
insert into +数据表名 values(相应数据)
在数据表中插入数据(部分插入 部分参数就行)
insert into +数据表名((参数名一,。。。。。, 参数名N)values(参数值一, 。。。。,参数值N))
查看数据:
查看数据表中的内容(全部)
select * from +数据表名
查询数据表中的内容 (部分)
select name, sroce from +数据表名
查询数据表特定内容
select * from +数据表名 where 参数=?;(一个限定条件)
select * from +数据表名 where 参数1=? and 参数2=?;(两个限定条件必须同时满足)
select * from +数据表名 where 参数1=? or 参数2=?;(两个限定条件满足一个就行)
删除数据:
delete from +数据表名 ;(删除整个数据表)
delete from +数据表名 where 参数=?;(删除特定行)
更新数据:
update +数据表名 set 参数1=?where 参数2=?;
update +数据表名 set 参数1=?, 参数2=?where 参数3=? ;
删除表:
drop table 数据表名
给数据表重命名
alter table +原的数据表名 rename to 要改成的数据表名
sqlite不支持删除一列信息
所以只能间接删除 步骤如下:
1.创建一张新表
2.删除原有的表
3.将新表的名字改成原来的表的名字
这样旧表的内容会自动写入到新表中
API
打开数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);
第一个参数指文件名
第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),称为数据库句柄。
返回值:表示操所是否正确 (SQLITE_OK 操作正常)
说明:打开一个数据库,文件名不一定要存在,如果此文件不存在,sqlite会自动创建。
关闭数据库
int sqlite3_close(sqlite3*);
参数就是刚才的结构体,也就是数据库句柄。
说明:如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。
执行SQL语句
int sqlite3_exec(sqlite3*,const char *sql,sqlite_callback,void *,char **errmsg);
这个函数的功能是执行一条或者多条SQL语句,SQL语句之间用“;”号隔开,在执行select语句的时候,需指定第三个参数回调函数,在回调函数中可以获得执行Sql得详细过程,如果所有Sql执行完毕则应该返回0,否则,则说明这次执行并没有完全成功。
第五个参数当如果执行失败(没有返回0)则可以查看第五个阐述得值。来查看详细错误信息,通常sqlite3_callback和它后面的void*这两个位置都可以填NULL,表示不需要回调。比如做insert操作,做delete操作,就没有必要使用回调。而当作select时,就要使用回调,因为sqlite3把数据查出来,得通过回调告诉你查出了什么数据。
exec的回调函数原型
typedef int (*sqlite3_callback)(void*, int, char**, char**);
例如:int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
para是在 sqlite3_exec 里传入的 void * 参数,通过para参数,可以传入带有控制功能的数据
n_column是这一条记录有多少个字段 (即这条记录有多少列),char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组,每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以\0结尾),char ** column_name跟column_value是对应的,表示这个字段的字段名称
说明:回调函数必须定义为上面这个函数的类型。
全缓冲查询
int sqlite3_get_table(sqlite3*,const char *sql,char ***result,int *nrow,int *ncolumn,char **errmsg);
执行一次查询Sql 并且返回得到一个记录集。
说明:第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。
释放查询结果:
void sqlite3_free_table(char **result);
释放当前查询的记录集所占用的内存。
字节缓冲
int sqlite3_prepare( sqlite3 *db, const char *Sql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail );
参数:
db:数据指针, Sql:sql语句, nByte:如果nByte小于0,则函数取出Sql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。pzTail:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符。如果 pszTail 不为 NULL, 则 *pszTail 指向 sql 中第一个被传入的 SQL 语句的结尾. 该函数只编译 sql 的第一个语句, 所以 *pszTail 指向的内容则是未被编译的, ppStmt:能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,如假如输入的文本不包括sql语句。调用过程必须负责在编译好的sql语句完成使用后使用sqlite3_finalize()删除它。
说明,如果执行成功,则返回SQLITE_OK,否则返回一个错误码。