一、SQLite常用命令介绍
注:qlite3 指令(通常以 . 开头)
1. 创建或打开一个数据库文件
在终端下运行 sqlite3< *.db >
2. 显示当前打开的数据库文件
sqlite > .database
3. 显示数据库中所有表名
sqlite > .tables
4. 查看表的结构
sqlite > .schema <table_name>
5. 显示所有命令
sqlite > .help
6. 退出 sqlite3
sqlite > .quit
二、SQLite创建数据库与表常用命令介绍
注:每个命令以 ;结束
1. 创建新表
sqlite > create table <table_name> (f1 type1, f2type2,...);
type为数据类型,有如下类型:
NULL、INTEGER、REAL、TEXT、BLOB
注:若未指定类型,默认是字符串,即TEXT类型。
2. 删除表
sqlite > drop table <table_name>;
3. 查询表中所有记录
sqlite >select * from<table_name>;
4. 按指定条件查询表中记录
sqlite >select * from <table_name>where <expression>;
5. 向表中添加新纪录
sqlite >insert into <table_name>values(value1,value2,...);
6. 按指定的条件删除表中记录
sqlite >delete from <table_name>where <expression>;
7. 更新表中记录
sqlite > updata <table_name> set<f1=value1>,<f2=value2>... where <expression>;
8. 在表中添加字段
sqlite > alter table <table> addcolumn <field><type> defalut... ;
三、示例例程
1. 在shell中安装sqlite3命令:
sudo apt-get install sqlite sqlite3
Sudo apt-get install libsqlite3-dev
2. sqlite3常用命令:创、增、删、改、查
以创建学生表为例,学生表包含学号、姓名、性别、年龄字段
1)创:创建新表
sqlite>create table stu (sno integer primary key,sname text not null,ssextext,sage integer default 18);
注:第一个字段为 sno,数值类型为 integer,属性为primary key
第二个字段为 sname,数值类型为 text(字符串),属性为not null(不能为空)
第三个字段为 ssex 数值类型为 text
第四个字段为 sage 数值类型为integer 默认值为 18
2)增:
a) 向表中增加新记录
sqlite> insertinto stu values(12345,'wang','m',24);
b) 向表中增加新字段
sqlite> alter table stu add spwd text default '12345';
3)删:
a) 向表中删除记录(注:在sqlite3中不存在删除字段)
sqlite> deletefrom stu where sname = 'wang';
b)删除表
sqlite>droptable stu;
4)改:更改表中记录
sqlite> updatestu set spwd = '98765' where sno = 12347;
5)查:查询表中记录
a)查询表中所有记录
sqlite>select*from stu;
b) 查询表中某一条记录
sqlite> select*from stu1 where sname = 'peng';
四、sqlite3编程接口
注1:以下所有函数头文件为:#include<sqlite3.h>
注2:这些函数在shell下man命令查找不到
1. 函数原型:int sqlite3_open(char *path, sqlite3 **db);
功能:打开数据库
参数:char *path: 数据库的名字
sqlite3 **db: 数据库句柄
返回值:成功返回0,失败返回错误码(非零值)
2. 函数原型:int sqlite3_close(sqlite3*db);
功能:关掉数据库
返回值:成功返回0,失败返回错误码
3. 函数原型:const char *sqlite3_errmsg(sqlite3 *db);
功能:提取错误信息
4. 函数原型:int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback,void *, char **errmsg);
功能:执行一条sqlite3的语句
参数:sqlite3 *db
char *sql: sql命令语句
sqlite3_callbackcallback: 回调函数,如果命令带有返回信息,就会调用该函数
void * : 给回调函数传递参数
char**errmsg : 错误信息
返回值:成功返回0,失败返回错误码
5. 函数原型:typedef int (*sqlite3_callback) (void *para, int f_num, char **f_value,char **f_name);
功能:每找到一条记录自动执行一次回调函数
参数:para:传递给回调函数的参数
f_num:记录中包含的字段数目 3
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1
6. 函数原型:int sqlite3_get_table(sqlite3*db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);
功能:执行SQL操作,会把所有的结果一次性返回给我们,而sqlite3_callback函数返回多次
参数:db: 数据库句柄
*sql: sql命令语句
resultp: 用来指向sql执行结果的指针,所有结果还包括标题
nrow : 满足条件的记录的数目,比如记录12345、‘wang’、‘m’、24算一个
ncolumn:每条记录包含的字段数目,比如sno、sname等
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码
4. 示例代码1
通过callback回显执行命令select * from stu后的所有结果。
/*************************************************************************
@Author: wanghao
@Created Time : Thu 31 May 2018 03:36:43 AMPDT
@File Name: sqlite.c
@Description:
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define MAXSIZE 128
int callback(void * para, int f_num, char**f_value, char ** f_name);
int main(int argc, const char *argv[])
{
sqlite3*db;
char*errmsg;
//charsql[MAXSIZE] = "create table if not exists stu(sno integer primarykey,sname text not null, ssex text default 'm', sage integer default 19)";
//charsql[MAXSIZE] = "insert into stu values(12351,'liubang','m',18)";
//charsql[MAXSIZE] = "insert into stu values(12352,'zhuyuanzhang','m',28)";
//charsql[MAXSIZE] = "update stu set sage = 88 where sno > 20";
//charsql[MAXSIZE] = "delete from stu where sno = 12345";
charsql[MAXSIZE] = "select * from stu";
if(sqlite3_open("my.db",&db) != SQLITE_OK)
{
printf("error:%s\n",sqlite3_errmsg(db));
return-1;
}
if(sqlite3_exec(db,sql, callback, NULL, &errmsg) != SQLITE_OK)
{
printf("error:%s\n",errmsg);
return-2;
}
sqlite3_close(db);
return0;
}
int callback(void * para, int f_num, char**f_value, char ** f_name)
{
inti;
printf("************************************\n");
for(i= 0; i < f_num; i++)
{
printf("%s: %s\n",f_name[i], f_value[i]);
}
return0;
}
示例代码2:通过sqlite3_get_table回显执行命令select * from stu后的所有结果。
/*************************************************************************
@Author: wanghao
@Created Time : Thu 31 May 2018 03:36:43 AMPDT
@File Name: sqlite.c
@Description:
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define MAXSIZE 128
int main(int argc, const char *argv[])
{
sqlite3*db;
char*errmsg;
char**resultp;
intnrow, ncolumn, i, j, index;
charsql[MAXSIZE] = "select * from stu";
if(sqlite3_open("my.db",&db) != SQLITE_OK)
{
printf("error:%s\n",sqlite3_errmsg(db));
return-1;
}
if(sqlite3_get_table(db,sql, &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
{
printf("error:%s\n",errmsg);
return-2;
}
index= ncolumn;
printf("***************************************\n");
for(i= 0; i < nrow; i++)
{
for(j= 0; j < ncolumn; j++)
{
printf("%s:%s\n",resultp[j], resultp[index++]);
}
}
sqlite3_close(db);
return0;
}