sqlite3_open()
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:打开一个数据库,如果数据库不存在,则创建一个数据库
参数1:要打开的数据库的名字,是一个字符串
参数2:数据库操作句柄,是一个二级指针,需要我们传入一级指针的地址,如果打开数据库成功,则数据库指针由该参数返回
返回值:成功返回SQLITE_OK,失败返回一个错误码(非linux的错误码),可以使用sqlite_errmsg来获取错误信息,由sqlite3_errcode返回错误码值
注意:无论打开数据库是否成功,在不使用数据库时都应该使用sqlite3_close将其关闭
sqlite3_close()
int sqlite3_close(sqlite3*);
功能:关闭数据库,断开句柄所拥有的资源
参数:数据库指针
返回值:成功返回SQLITE_OK,失败返回其他错误码
sqlite3_errmsg()
const char *sqlite3_errmsg(sqlite3*);
功能:通过出错的句柄返回错误信息
参数:出错的句柄
返回值:对应的错误信息,是一个字符串
sqlite3_errcode()
int sqlite3_errcode(sqlite3 *db)
功能:通过错误句柄返回错误码
参数:错误句柄
返回值:错误码
sqlite3_exec()
int sqlite3_exec(
sqlite3* db, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:调用该函数,执行sql语句
参数1:已经被打开的数据库句柄
参数2:要执行的sql语句
参数3:回调函数,主要用于数据库查找时,处理查找的结果集的函数,如果不需要处理sql语句的结果,则填NULL即可
参数4:参数3的第一个参数
参数5:错误信息
返回值:成功返回SQLITE_OK,失败返回其他错误码
回调函数
int callback(void* arg,int cols,char** col_text, char** col_name)
功能:处理sqlite3_exec执行sql语句后的结果集,每有一条记录,就会执行一次callback函数
参数1:由sqlite3_exec函数传入的参数
参数2:当前记录中的列的个数
参数3:当前记录中的字段内容,是一个数组
参数4:当前记录中字段的名称,是一个数组
返回值:成功执行返回0,失败执行返回其他值
sqlite3_get_table()
int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
功能:通过执行sql语句,得到结果集中的内容
参数1:数据库
参数2:要执行的sql语句
参数3:查询的结果,需要定义一个二级指针变量,将地址进行传递
参数4: 查询结果的行数
参数5:查询结果的列数
参数6:错误信息
返回值:成功返回SQLITE_OK,失败返回非0的错误码
sqlite3_free_table()
void sqlite3_free_table(char **result);
功能:释放表的空间
参数:通过sql语句查询的结果
sql语句
1)创建表格
create table 表名 (字段名 数据类型, 字段名 数据类型);
create table if not exists 表名 (字段名 数据类型, 字段名 数据类型);
eg:
CREATE TABLE stu (id int, name char, score float);
CREATE TABLE if not exists stu1 (id int, name char, score float);
注意:数据库不支持严格的数据类型检查,数据类型写错了,创建是能够成功的,不会有错误提示;
2)删除表格
drop table 表名;
eg:
drop table stu1;
3)插入记录
字符串类型可以使用单引号,也可以使用双引号
① 全字段插入 insert into 表名 values (数据1, 数据2, 数据3);
eg:
INSERT INTO stu VALUES (2, 'ls', 99); INSERT INTO stu VALUES (1, "zs", 59);
注意: 1.数据输入的顺序要与创建时候字段的顺序一致;
②部分字段插入 insert into 表名 (字段名1, 字段名2) values (数据1, 数据2);
eg:
INSERT INTO stu (id, name) values (9, 'ww');
注意: 1.数据的顺序要与指定的字段名1,字段名2对应;
4)查看记录
.header on 打开表头
.mode column 对齐
在终端输入shell指令:sqlitebrowser sq.db 图形化界面
① 查看所有记录 select * from 表名;
eg:
SELECT * FROM stu;
② 查看某几行 select * from 表名 where 限制条件;
逻辑与 and 逻辑或 or
eg:
SELECT * FROM stu WHERE id<3 AND score>90;
SELECT * FROM stu WHERE id<2 OR id>3;
③ 查看某几列
select 字段1, 字段2 from 表名;
select 字段1, 字段2 from 表名 where 限制条件;
eg:
SELECT id, name FROM stu;
SELECT id, name FROM stu WHERE score>90;
5)修改记录
update 表名 set 字段=数值 where 限制条件;
eg:
UPDATE stu SET score=60 WHERE id=1;
注意:该语句中的where表明去修改指定的记录,如果没有加where,则表明将所有记录的该值都更新
6)删除记录
delete from 表名 where 限制条件;
eg:
DELETE FROM stu WHERE id=1;
delete from stu; 删除表格中的所有数据;
7)主键(primary key)
primary key 主键;
create table 表名(字段名 数据类型 primary key, 字段名 数据类型);
primary key主键:唯一标识表格中的每一条记录;
例如:id字段为主键,当表格中有id==1的记录时,不允许再插入id为1的记录了;
eg:
CREATE TABLE stu (id int PRIMARY KEY, name char, score float);
注意:主键的值必须唯一。每一张表格都应该设置一个主键,而且只能设置一个。
8)拷贝
从a中拷贝所有数据到b中:
create table b as select * from a;
从a中拷贝指定字段到b中:
create table b as select 字段,字段,字段 from a;
CREATE TABLE stu1 AS SELECT * FROM stu;
CREATE TABLE stu2 AS SELECT id, name, score FROM stu;
9)增加列
alter table 表名 add column 字段名 数据类型;
alter table stu add column score int;
10)修改表名
alter table 旧表名 rename to 新表名;
alter table stu rename to stuinfo;
11)修改字段名(列名)
不支持直接修改列名
① 将表重新命名(a改成b)
alter table stuinfo rename to stu;
② 新建修改名字后的表(新建一个a)
create table stuinfo (name char, age1 int, sex char, score int);
③ 从旧表b中取出数据,插入到新表a中;
insert into stuinfo select * from stu;
12)删除列
不支持直接删除列;
1.创建一个新表b,并复制旧表a需要保留的字段信息;
create table stu as select name, age1, sex from stuinfo;
2.删除旧表a;
drop table stuinfo;
3.修改新表b的名字a;
alter table stu rename to stuinfo;