vim环境下简单的SQlite数据库创建表格实现表格的增删改查

SQLite数据库命令:

一些简单的API指令:

提示:要先在Ubuntu上安装SQlite

例如:

  1. 进入SQlite:sqlite3
  2. 创建表格 :int sqlite3_open(char * filename(数据库文件路径),sqlite3 **db(指向sqlite句柄的指针))
  3. 关闭数据库,释放资源 :int sqlite3_close(sqlite3 *db),成功反0,失败反错误代码,参见SQLite错误代码
  4. 执行函数: int sqlite3_exec(sqlite3 *db(数据库操作句柄),const char *sql(一条sql语句), sqlite3_callback(回调函数), void *, char **errmsg(错误信息))
  5. 回调函数: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 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值