网络编程6之数据库

1.sqlite3基本命令

//命令以.开头

sqltite3 my.db //打开my.db,不存在就创建

.help //帮助

.quit //退出

.database //显示打开的数据库

.table //显示数据库中的表

.schema //显示表的结构

2.sqlite3基本语句(SQL语句)

//sql语句以;结尾

//常见的数据类型:int,float,text(字符与字符串结合在一起)

create table xxx (name text,passwd text); //创建一张名为xxx的表,表中元素有两种,name与passwd,类型都为text。

insert into xxx values (‘tom’,‘ps666’); //向表xxx中插入数据,类型与数量要按顺序对应

delete from xxx where passwd='ps666'; //删除表中passwd为ps666的数据

update xxx set passwd='ps777' where name='tom'; //修改表xxx中name为tom的数据的passwd为ps777

select * from xxx; //查询表中所有数据

select *from xxx where name='tom'; //查询表中name元素为的数据

drop table xxx; //删除表

3.sqlite3接口函数

sqlite3_open(); //打开数据库

sqlite3_exec(); //执行sql语句

sqlite3_close(); //关闭数据库

sqlite3_get_table(); //查询

int sqlite3_open(const char *filename, sqlite3 **ppDb)
  
功能:  打开数据库
参数:         filename:数据库路径名  ppDb:代指打开的数据库(打开的数据库句柄)
返回值:        成功返回 SQLITE_OK 
                 失败返回 错误码
    
 Others:        不存在,则创建

int sqlite3_exec(sqlite3* ppDb, const char *sql, sqlite_callback, void *data, char **errmsg)

功能:  执行sql语句
参数:                ppDb:为刚才使用sqlite3_open打开的数据库链接
                 sql: sql语句
                 sqlite_callback:回调函数 用于查询 不关心写NULL
                 data: 回调函数的参数  不关心写NULL
                 errmsg:返回的错误信息
                     
返回值:        成功返回0 失败返回错误码

int sqlite3_close(sqlite3 *ppDb);
 
功能:             关闭数据库
参数:                ppDb:为刚才使用sqlite3_open打开的数据库链接
    
返回值:           成功返回0,失败返回-1  

int   sqlite3_get_table(sqlite3 *ppDb, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);
 
功能:             执行sql语句
参数:             ppDb:为刚才使用sqlite3_open打开的数据库链接
                 sql: sql语句
                resultp:查询的结果 例如:resultp[0]、resultp[1]、resultp[2]、resultp[3]
                 nrow: 查询到的记录数目
                 ncolumn:字段数目
                 errmsg:返回的错误信息
                     
返回值:            成功返回0 失败返回错误码  

/*===============================================
*   文件名称:sqlite3.c
*   创 建 者:     
*   创建日期:2022年08月20日
*   描    述:
================================================*/
#include <stdio.h>
#include <sqlite3.h>
#include <string.h>

int callback(void *para,int f_num,char **f_value,char **f_name)//回调函数,查2使用,一行调用一次回调函数
{
	int i;
	for(i=0;i<f_num;i++)//打印一列
	{
		printf("%s ",f_value[i]);
	}
	puts("就这?");
	return 0;
}

int main(int argc, char *argv[])
{ 
	sqlite3 *db;
	int ret = sqlite3_open("./my.db",&db);
	if(ret!=SQLITE_OK)
	{
		perror("sqlite3_open");
		return -1;
	}
	//创建一张表
	char sql[256]="create table if not exists score (name text,num int,score float);";
	
	char *errmsg;
	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	//增删改
	strcpy(sql,"insert into score values ('zhangsan',1,66.6);");//增
	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	strcpy(sql,"insert into score values ('lisi',2,77.7);");//增
	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	strcpy(sql,"update score set score=88.8 where score=66.6;");//改
	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	strcpy(sql,"delete from score where score=77.7");//删
	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	//查1
	strcpy(sql,"select * from score;");
	char **resultp;
	int nrow,ncolmun,i,index=0;
	ret = sqlite3_get_table(db,sql,&resultp,&nrow,&ncolmun,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_get_table:%s\n",errmsg);
		return -1;
	}
	
	for(i=0;i<nrow+1;i++)
	{
		printf("%10s|%4s|%5s\n",resultp[index],resultp[index+1],resultp[index+2]);
		index+=ncolmun;
	}
	//printf("nrow:%d nclomun:%d\n",nrow,ncolmun);
	printf("----------------------------------\n");
	//查2
	strcpy(sql,"select * from score;");
	ret = sqlite3_exec(db,sql,callback,NULL,&errmsg);
	if(ret<0)
	{
		printf("sqlite3_exec:%s\n",errmsg);
		return -1;
	}
	
	ret = sqlite3_close(db);
	
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值