**3.SQlite3 基本命令**
- 1.系统命令
- 以 . 开头的命令
- .help 帮助
- .quit 退出
- .schema查看表结构
- .databases 查看打开的数据库
- .table
- **2.sql命令**
- 基本的sql命令,不以 . 开头,但是都要 ; 结尾
- 创建一张数据库的表stu
- create table stu(id Integer,name char,score Integer);
- 插入一张记录
- insert into stu values(1001,'zhangsan',80);
- 插入部分字段记录
- insert into stu(name,score) values(1002,'lisi');
- 查询所有记录
- select *from stu
- 查询数据库部分内容字段
- select name,score from stu
- 根据属性查询
- select * from stu where score=80;
- select *from stu where score=80 and name='zhangsan';
- 删除一条记录
- delede from stu where id=1003;
- delete from stu where socre='90';
- 更新一条记录
- update stu set name='wangwu' where id=1001;
- update stu set name='wangwu',score=88 where id = 1001;
- 添加一列
- alter table stu add column address char;
- 删除一列
- 1.创建一张表
- 提取字段
- create table stu1 as select id,name,score from stu;
- 2.删除原有表
- drop table stu;
- 3.将新的表的名字改成原有的表名字
- alter table stu1 rename to stu;
## 5.SQlite编程接口
**4.API操作**
1.int sqlite3_open(char *filename,sqlite3 **db)
- 功能:打开sqlite数据库
- 参数:
- filename:数据库文件路径
- db:指向sqlite句柄的指针
- 返回值:
- 成功返回0,失败返回错误码(非0值)
**2.int sqlite3_close(sqlite3 *db);**
- 功能:关闭sqlite数据库
- 参数:
- db 操作数据库的指针
- 返回值:
- 成功返回0,失败返回错误码
**3.const char *sqlite3_errmsg(sqlite3 *db);**
- 功能:通过DB句柄得到数据库操作的错误信息
- 参数:
- db 操作数据库的指针
- 返回值:
- 返回错误信息的首地址
**4.int sqlite3_exec(**
sqlite3*db,
const char *sql,
int (*callback)(void *,int,char**,char *8)
void *,
char **errmsg);
- 功能:执行一条sql语句
- 参数
- db:数据库操作句柄
- sql:一条sql语句
- callback:回调函数,只有sql为查询语句的时候,才会执行此语句
- void * :给回调函数传递参数
- errmsg:错误信息
- 返回值:
- 成功:SQLITE_OK
int (*callback)(void *,int,char**,char *8)
功能:查询结果,是一个函数指针类型,传递一个函数名
**回调函数接口:**
typedef int(*sqlite3_callback)(
void *para,
int f_num,
char ** f_value,
char ** f_name)
- 功能: 每找到一条记录自动执行一次回调函数
- para:传递给回调函数的参数
- f_num:记录中包含的字段数目
- f_value:包含每个字段值的指针数组
- f_name:包含每个字段名称的指针数组
- 返回值,成功返回0,失败返回-1
**不使用回调函数执行SQL语句**
int sqlite3_get_table(
sqlite3 *db,
const char *sql,
char ***resultp,
**int *nrow,**
**int *ncolumu,**
char **errmsg)
- 功能:执行sql操作
- db:数据库句柄
- sql:sql语句
- resultp:用来指向sql执行结果的指针
- nrow:满足条件的记录的数目
- ncolumn:每条记录包含的字段数目
- errmsg:错误信息指针的地址
- 返回值:成功返回0,失败返回错误码
#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
#define FILENAME "student.db"
void do_inser(sqlite3 *db)
{
int id = -1;
char name[20] = {0};
int score = -1;
char *errmsg;
char sql[128] = {0};
printf("please input id\n");
scanf("%d",&id);
getchar();
printf("please input name\n");
scanf("%s",name);
getchar();
printf("please input score\n");
scanf("%d",&score);
getchar();
sprintf(sql,"insert into stu values(%d,'%s',%d)",id,name,score);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("do_insert error:%s\n",sqlite3_errmsg(db));
exit(0);
}
printf("insert success!\n");
}
void do_delete(sqlite3 *db)
{
int id = -1;
char *errmsg;
char sql[128] = {0};
printf("please input delete id\n");
scanf("%d",&id);
getchar();
sprintf(sql,"delete from stu where id=%d",id);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("do_delete error:%s\n",sqlite3_errmsg(db));
exit(0);
}
printf("delete succss!\n");
}
void do_update(sqlite3 *db)
{
int id = -1;
char name[20] = {0};
int score = -1;
char *errmsg,sql[128] = {0};
printf("please update id:");
scanf("%d",&id);
getchar();
printf("please update name:");
scanf("%s",name);
getchar();
printf("please update score:");
scanf("%d",&score);
getchar();
sprintf(sql,"update stu set name='%s',score=%d where id=%d",name,score,id);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("do_update error %s\n",sqlite3_errmsg(db));
exit(0);
}
printf("update data success\n");
}
int callback(void *para,int f_num,char **f_value,char **f_name)
{
int i = -1;
for(i=0;i<f_num;i++)
{
printf("%s ",f_value[i]);
printf("\n");
//printf("%s ",f_name[i]);
}
putchar(10);
return 0;
}
void do_query(sqlite3 *db)
{
char sql[128] = {0};
char *errmsg;
sprintf(sql,"select *from stu;");
if(sqlite3_exec(db,sql,callback,NULL,&errmsg) != SQLITE_OK)
{
printf("do_query error %s\n",sqlite3_errmsg(db));
exit(0);
}
printf("query success!\n");
}
void do_quit(sqlite3 *db)
{
printf("close success!\n");
sqlite3_close(db);
exit(0);
}
int main()
{
int cmd;
sqlite3 *db;
char *errmag;
//open sqlite
if(sqlite3_open(FILENAME,&db) != 0)
{
printf("sqlite_open:%s\n",sqlite3_errmsg(db));
exit(0);
}
printf("the sqlite open success!\n");
if(sqlite3_exec(db,"create table stu(id integer,name char,score integer);",NULL,NULL,&errmag) != SQLITE_OK)
{
printf("sqlite_exec:%s\n",sqlite3_errmsg(db));
exit(0);
}
printf("sqlite_exec success!\n");
while(1)
{
printf("**************\n");
printf("\n");
printf("1:inser,2:delete,3:query,4:updata,5:quit\n");
printf("\n");
printf("**************\n");
printf("please input cmd\n");
scanf("%d",&cmd);
getchar();
switch(cmd)
{
case 1:do_inser(db);
break;
case 2:do_delete(db);
break;
case 3:do_query(db);
break;
case 4:do_update(db);
break;
case 5:do_quit(db);
break;
default:
printf("cmd error\n");
}
}
return 0;
}