在线安装:
sudo apt-get install sqlite3 libsqlite3-dev
sqlite3 filename.db (数据库文件名一般是以 .db 结尾)
.help
打开帮助文档
.open
打开数据库文件
.quit
退出数据库.q
也可以
.exit
退出数据库
.tables
查看当前数据库文件中有哪些数据表
.schema
查看建表语句(表的结构)
.headers on|off
是否显示表头信息
CREATE TABLE 表名(字段名1 字段的类型1, ..., 字段n 字段类型n);
字段类型 :
整型INT
或者INTEGER
字符串CHAR
或者TEXT
eg:
CREATE TABLE student(id INT, name CHAR, score INTEGER);
INSERT INTO 表名 VALUES(逗号分隔的字段的值);
必须从左到右给每个字段赋值
INSERT INTO student VALUES(1001, "张三", 99);
INSERT INTO 表名(字段名) VALUES(字段的值);
可以只给几个字段赋值
INSERT INTO student(id,name) VALUES(1002, "李四");
注意 : 如果是字符串要用 单引号 或者 双引号 引起来
SELECT * FROM student;
*
表示查询表中所有字段
SELECT id,name FROM student;
只查询 id 和 name
SELECT * FROM student WHERE score=98;
只查询 score 为 98 的记录
SELECT * FROM student WHERE name="李四";
字符串要加 引号
SELECT * FROM student WHERE score=99 AND id=1001;
查询score是99并且 id是1001 的记录
SELECT * FROM student WHERE score=99 OR name="李四";
查询score是99 或者 name是李四 的记录
对查询到的结果进行排序 ,ORDER BY 根据哪个字段排序
默认是 升序ASC升序
DESC 降序
SELECT * FROM student ORDER BY score DESC;
将student表中 id 为1001 的记录中的 名字改成 小小 成绩改成 0 分
UPDATE student SET name="小小",score=0 WHERE id=1001;
DELETE FROM student WHERE id=1001;
将id为1001的记录在 student 表中删除
DROP TABLE 表名;
ALTER TABLE student ADD COLUMN sex text;
在student表中添加一个字段 sex
sqlite3 不允许直接删除一列
1)先创建一张新
create table stu1 as select id,name from stu;
少了score
列
2)删除原来的旧表
drop table stu;
3)对新表重命名
alter table stu1 rename to stu;
如果设置了某个字段为主键,那么该字段就不允许
重复
CREATE TABLE student(id INT PRIMARY KEY, name TEXT, score INT);
sqlite3 函数的头文件
sqlite3.h
编译是要链接 sqlite3 的库-lsqlite3
int sqlite3_open(const char *filename, sqlite3 **ppDb );
功能:
打开一个数据库文件,存在直接打开 不存在 新建并打开
参数:
filename 数据库文件名字
ppdb 操作数据库的指针,句柄
返回值:
成功 SQLITE_OK
失败 error_code
eg:
sqlite3 *sql_db = NULL;
int ret = sqlite3_open("NO1.db", &sql_db);
const char *sqlite3_errmsg(sqlite3* db);
功能:获取错误信息描述
eg:
printf("错误信息[%s]\n", sqlite3_errmsg(sql_db));
int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void*,int,char**,char**),void * arg, char **errmsg);
功能:
执行一条sql语句
参数:
db 数据库的句柄指针
sql 将要被执行sql语句
callback 回调函数,只有在-查询语句-时,才给回调函数传参
arg 为callback 传参的
errmsg 错误信息的地址 如果使用了这个参数
需要用sqlite3_free() 函数释放空间!!!!!!!!!!
返回值:
成功 SQLITE_OK
出错 errcode 错误码
&errstr
→printf("errmsg[%s]\n", errstr);
错误信息打印方式
eg:
> IF NOT EXISTS 表不存在则创建 表存在则直接使用,而不是报错;引号里面sql语句后面不用加分号
> char *errstr = NULL;
> char buff[128] = "CREATE TABLE IF NOT EXISTS student(id INT PRIMARY KEY, name CHAR, score INT)";建表
> ret = sqlite3_exec(sql_db, buff, NULL, NULL, &errstr);
> if(ret != SQLITE_OK){
printf("errcode[%d] errmsg[%s]\n", ret, errstr);
exit(-1);
}
> sqlite3_free(errstr); 释放错误信息的空间 防止内存泄漏
int (*callback)(void* arg ,int ncolumn ,char** f_value,char** f_name)
功能:
得到查询结果
参数:
arg 为回调函数传递参数使用的 --传递多个参数,使用结构体传参
ncolumn 记录中包含的字段的数目 --表的结构 字段数
f_value 包含每个字段值的指针数组 --字段值
f_name 包含每个字段名称的指针数组-字段名(表头)
返回值:
成功 0
出错 非0
eg:
> 1.回调函数
> int callback(void* arg ,int ncolumn , char** f_value, char** f_name)
> {
每查询到一条记录 这个函数就会被调用一次
return 0;//必须写返回值 否则报错
> }
>2.执行sql语句
> char sql_buff[256] = {0};
> sprintf(sql_buff,"SELECT * FROM student");查询
> sqlite3_exec(sql_db, sql_buff, callback, NULL, NULL);
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***pazResult,int *pnRow, int *pnColumn, char **pzErrmsg);
功能:
查询数据库,它会创建一个新的内存区域来存放查询的结果信息
使用完之后要 释放 ,否则内存泄漏 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
参数:
db 数据库操作句柄
sql 数据库的sql语句
pazResult 查询的结果集
nRow 行数(不包括表头)
nColumn 列数
pzErrmsg 错误消息
返回值:
成功 0
出错 errcode
eg:
char **result = NULL; 结果集
int row = 0; 行数
int column = 0; 列数
1.sqlite3_get_table 内部会将 查询的到的结果的 行数写到row的地址里
会将 查询的到的结果的 列数写到column的地址里
2.会让 result 指向 sqlite3_get_table 申请的结果集的内存空间
int ret = sqlite3_get_table(sql_db, sql_buff, &result, &row, &column, NULL);
if(ret != SQLITE_OK)
{
printf("查询失败 errcode[%d] errmsg[%s]\n", ret, sqlite3_errmsg(sql_db));
return;
}
void sqlite3_free_table(char **result);
eg:
sqlite3_free_table(result);
释放 结果集result
防止内存泄漏
int sqlite3_close(sqlite3* db);
功能:关闭一个数据库
eg:
sqlite3_close(sql_db);
关闭sqlite3 句柄
1. 错误信息打印方式
sqlite3_exec(sql_db, buff, NULL, NULL, &errstr)
→printf("errmsg[%s]\n", errstr)
sqlite3_free(errstr);
释放错误信息errstr
的空间 防止内存泄漏
sqlite3_exec(sql_db, buff, NULL, NULL, NULL)
→printf("errmsg[%s]\n",sqlite3_errmsg(sql_db))
基于SQLite数据库的学生管理系统 : 学生管理系统