文章目录
SQLite 基础
SQLite 数据库
安装数据库:
sudo apt-get install sqlite sqlite3
sudo apt-get install libsqlite3-dev
创建 SQLite 数据库
sqlite3 stu.db
SQLite 常用命令介绍
sqlite 命令
系统命令 以 .
开头
普通命令 ,以 ;
结束
.schema
查看表的结构
.quit
退出数据库
.exit
退出数据库
.help
查看帮助信息
.databases
查看数据库
.tables
显示数据库中所有的表的表名
sqlite3 的使用
创建一张表:
create table 表名(字段名称1 字段类型,字段名称2 字段类型, ....);
create table stu(id int, name char, sex char , score int);
数据库主键(既设置的数据将会是唯一存在的):
create table usr(name text primary key , passwd text);
向表中插入一条记录:
insert into 表名 values (字段值1, 字段值2, ...);
insert into stu values(1001, 'zhangsan', 'm', 89);
insert into stu (id, name, sex,score) values(1002, 'lisi', 'm', 99);
查询记录:
select * from stu;
查找所有的记录select * from stu where id=1001;
查找符号条件的记录select * from stu where id=1001 and name='zhangsan';
字符串需要加引号select * from stu where name = 'zhangsan' or score=92;
删除记录:
delete from stu where id=1004;
更新记录:
update stu set score=98 where id=1003;
删除一张表:
drop table stu;
添加一列:
alter table stu add column score int;
删除一列(sqlite3 不允许直接删除一列):
- 先创建一张新表:
create table stu1 as select id , name from stu;
- 删除原来的旧表:
drop table stu;
- 对新表重命名:
alter table stu1 rename to stu;
SQLite 编程接口
sqlite3_open
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:打开一个数据库
参数:
filename
数据库名字ppdb
操作数据库的指针,句柄。
返回值:
- 成功
SQLITE_OK
- 失败
error_code
例子:
sqlite3 *db;
if(sqlite3_open("stu.db", &db) != SQLITE_OK)
printf("%s\n", sqlite3_errmsg(db));
sqlite3_errmsg
const char *sqlite3_errmsg(sqlite3* db);
功能:获取错误信息描述
sqlite3_close
int sqlite3_close(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 语句
参数:
db
数据库的句柄指针sql
将要被执行sql语句callback
回调函数, 只有在查询语句时,才给回调函数传参arg
为callback
传参的errmsg
错误信息的地址
返回值:
- 成功:
SQLITE_OK
- 出错:
errcode
错误码
例子:
char *errmsg;
if(sqlite3_exec(db, "create table stu(id int, name char, score int)", NULL, NULL, &errmsg) != SQLITE_OK)
printf("%s\n", errmsg);
callback
int (*callback)(void* arg ,int ncolumn ,char** f_value,char** f_name)
功能:得到查询结果
参数:
arg
为回调函数传递参数使用的ncolumn
记录中包含的字段的数目f_value
包含每个字段值的指针数组f_name
包含每个字段名称的指针数组
返回值:
- 成功
0
- 出错 非
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 */ );
功能:查询数据库,它会创建一个新的内存区域来存放查询的结果信息
参数:
-
db
数据库操作句柄 -
sql
数据库的sql语句 -
azResult
查询的结果 -
nRow
行数,为查询到的符合条件的记录数(不包括字段名)。- 注意:
nrow
的值不包括字段名,如果打印时用for (i = 0; i < nrow; i++)
会打印出字段名,但是会少打印出一条符合条件的记录。因此打印时要用for (i = 0; i <nrow + 1; i++);
将包括字段名在内的数据都打印出来。
- 注意:
-
nColumn
列数,为查询到的符合条件的字段数。 -
errmsg
错误消息
返回值:
- 成功
0
- 出错
errcode
sqlite3_free_table
void sqlite3_free_table(char **result);
功能:释放内存