SQLite数据库命令:
一些简单的API指令:
提示:要先在Ubuntu上安装SQlite
例如:
- 进入SQlite:sqlite3
- 创建表格 :int sqlite3_open(char * filename(数据库文件路径),sqlite3 **db(指向sqlite句柄的指针))
- 关闭数据库,释放资源 :int sqlite3_close(sqlite3 *db),成功反0,失败反错误代码,参见SQLite错误代码
- 执行函数: int sqlite3_exec(sqlite3 *db(数据库操作句柄),const char *sql(一条sql语句), sqlite3_callback(回调函数), void *, char **errmsg(错误信息))
- 回调函数:sqlite3_exec每查询到一条记录调用一次该回调函数 int 函数名(void*,int,char**, char**)
1、传入的参数【IN】
2、结果集的列数【IN】
3、列值 【IN】
4、列名【IN】
代码实现:
提示:vim环境下编写
- 练习:先创建一个表格
// A code block
var foo = 'bar';
// 创建表格,提示表格创建成功
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define DATABASE "student.db"
int main()
{
sqlite3* db;
char *errmsg;
if(sqlite3_open(DATABASE,&db) != SQLITE_OK)
{
printf("%s\n",sqlite3_errmsg(db));
exit(1);
}else
{
printf("open sqlite success\n");
}
if(sqlite3_exec(db,"create table stu(id integer,name char,score integer);",NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s \n ",sqlite3_errmsg(db));
perror("sqlite");
exit(1);
}
else
{
printf("creat or open table success\n:");
}
return 0;
}
- 用Switch的方式实现增删改查:
// An highlighted block
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define DATABASE "student.db"
int do_insert(sqlite3* db) //执行插入指令
{
int id;
char name[32]={};
int score;
char sql[128]={};
char *errmsg;
printf("please input id:");
scanf("%d",&id);
getchar();
printf("please input name:");
scanf("%s",name);
getchar();
printf("please input score:");
scanf("%d",&score);
getchar();
sprintf(sql,"insert int student values(%d,'%s',%d);",id,name,score);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
exit(0);
}
int do_delete(sqlite3 *db)
{
int id;
char sql[128]={0};
char *errmsg;
printf("please input id:");
scanf("%d",&id);
getchar();
sprintf(sql,"delete from stu where id=%d",id);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK )
{
printf("%s\n",errmsg);
exit(0);
}
else
{
printf("delete success!\n");
}
return 0;
}
int do_update(sqlite3 *db)
{
int id;
char sql[128]={};
int score;
char *errmsg;
printf("please input id:");
scanf("%d",&id);
getchar();
printf("please input score:");
scanf("%d",&score);
getchar();
sprintf(sql,"update stu set score = %d where id=%d",score,id);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK )
{
printf("%s\n",errmsg);
exit(0);
}
else
{
printf("update success!\n");
}
return 0;
}
int callback(void *para,int f_num,char **f_value,char **f_name) //回调函数
{
int i=0;
for(i=0;i<f_num;i++)
{
printf("%s",f_value[i]);
}
putchar(10);
return 0;
}
int do_query(sqlite3 *db) //使用回调函数打印的方式
{
char sql[128]={};
char *errmsg;
sprintf(sql,"select * from stu"); //sql储存查找表格的系统命令
if(sqlite3_exec(db,sql,callback,NULL,&errmsg) !=SQLITE_OK )
{
printf("%s\n",errmsg);
exit(0);
}
else
{
printf("query success!\n");
}
return 0;
}
int do_query1(sqlite *db) //不使用回调函数的方式
{
char sql[128] = {};
char *errmsg;
char **resultp;
int nrow;
int ncloumn;
int i,j,index;
sprintf(sql,"select * from stu");
if(sqlite3_get_table(db,sql,&resultp,&ncloum,&errmsg) !=SQLITE_OK ) //
{
printf("%s\n",errmsg);
exit(0);
}
else
{
printf("query success!\n");
}
index= ncloumn;
for(i=0;i<nrow;i++)
{
for(j=0;j>ncloumn;j++)
{
prinf("%-11s",resultp[index++]);
}
putchar(10);
}
return 0;
}
int close_sqlite3()
{
char sql[128]={};
sprintf(sql,".quit;");
exit(0);
return 0;
}
int main()
{
sqlite3* db;
char *errmsg;
int cmd;
if(sqlite3_open(DATABASE,&db) != SQLITE_OK)
{
printf("%s\n",sqlite3_errmsg(db));
exit(1);
}else
{
printf("open sqlite success\n");
}
if(sqlite3_exec(db,"create table stu(id integer,name char,score integer);",NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s \n ",sqlite3_errmsg(db));
perror("sqlite");
exit(1);
}
else
{
printf("creat or open table success\n:");
}
while(1)
{
printf("------------------------------\n:");
printf("1:insert , 2:delete, 3:quert, 4:quert1,5:update,6:quit\n:");
printf("------------------------------\n:");
switch(cmd)
{
case 1:
do_insert(db);
break;
case 2:
do_delete(db);
break;
case 3:
do_update(db);
break;
case 4:
do_query(db);
break;
case 5:
do_query1(db);
break;
case 6:
close_sqlite3(db);
exit(0);
break;
default:
printf("err cmd\n");
}
}
return 0;
}}
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- 优快云 技术博客 3 篇
- 习的 vlog 视频 1 个