数据库—查询(有无回调函数)

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>

int create_table(sqlite3 * pdb)
{
	char * errmsg = NULL;
    char * sql;//存储命令
	int ret;

	sql = "create table if not exists mytable (id integer primary key,name text);";
    //给创建表的命令赋值(id,name),表如果不存在就创建
    ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
    
	if(SQLITE_OK != ret)
	{ 
		printf("create table failed! %s\n",errmsg);
		return -1;
	}
	else
	{
		return SQLITE_OK;
	}
}

void insert_record(sqlite3 * pdb)
{
	char * errmsg = NULL;
    char sql[100];//
	int ret;
	int id;
	char name[30];

	printf("please input id  and  name:\n");
	scanf("%d%s",&id,name);
    //sq1 = "insert into mytable (id,name) value (1,'chen');";
	sprintf(sql,"insert into mytable(id,name) values (%d,'%s');",id,name);
    //插入
    ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);

	if(SQLITE_OK != ret)
	{
		printf("insert error 1! %s\n",errmsg);
		exit(-1);
	}
#if 0
	sql = "insert into mytable values (NULL,'zhang');";

    ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);

	if(SQLITE_OK != ret)
	{
		printf("insert error 2! %s\n",errmsg);
		exit(-1);
	}

	sql = "insert into mytable values (NULL,'liang');";

    ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);

	if(SQLITE_OK != ret)
	{
		printf("insert error 3! %s\n",errmsg);
		exit(-1);
	}
#endif
}

int displaycb(void * para,int n_col, char ** val_col,char ** name_col)
{
    //查询结果里有几列,每一列的值,
	int i;
	int * flag = NULL;

	flag = (int *)para;

	if(0 == *flag )
	{
		printf("total column is %d\n",n_col);
        //查询结果有几列
    	for( i = 0; i < n_col; i++)//几列
    	{
            printf("%10s",name_col[i]);//每一列的名字
            //字符型的指针数组,每个元素是字符型指针,就是字符串
    	}

    	printf("\n");

		 *flag = 1;
	}

	for(i = 0;i < n_col;i++)//显示每一列的值
	{
		printf("%10s",val_col[i]);
	}

	printf("\n");

	return 0;
}

void inquire_usecb(sqlite3 * pdb)
{
	char * errmsg = NULL;
    char * sql;
	int ret;
	int flag = 0;

	sql = "select * from mytable;";
    //查询
    ret = sqlite3_exec(pdb,sql,displaycb,(void *)&flag,&errmsg);
    //
	if(SQLITE_OK != ret)
	{
		printf("select error! %s\n",errmsg);
	}
}
void inquire_nocb(sqlite3 * pdb)
{
    char *sql = NULL;
	char ** azresult = NULL;//二级指针是一个指向指针数组的指针,指向空
	//一维数组的起始地址,指向一维数组的指针,它是指向指针数组的 
	char * errmsg = NULL;
	int n_row,n_col;
	int ret,i;

	sql = "select * from mytable;";

	ret = sqlite3_get_table(pdb,sql,&azresult,&n_row,&n_col,&errmsg);

	if(SQLITE_OK != ret)
	{
		printf("get tabble error! %s\n",errmsg);
		exit(-1);
	}

    printf("n_row = %d  n_col = %d\n",n_row,n_col); 

	printf("the result of inquire is:\n");

	for(i = 0; i < (n_row + 1) * n_col ;i++)
	{
		printf("%10s",azresult[i]);

		if((i + 1) % n_col == 0)
		{
			printf("\n");
		}
	}

	sqlite3_free_table(azresult);
	//把所有的查询结果都处理完以后,要free,把数组free掉
	//前面为什么不用free
}

int main()
{
	sqlite3 * pdb = NULL;
	int ret;

	ret = sqlite3_open("mydatabase.db",&pdb);
    //数据库的名字,二级指针,指向数据库的指针

	if(SQLITE_OK == ret)//数据库创建成功
	{
		printf("you have opened a sqlite3 database successfull!\n");
	}//提示信息
	else
	{
		printf("can't open database! %s\n",sqlite3_errmsg(pdb));
		sqlite3_close(pdb);
		exit(EXIT_FAILURE);
	}

	if(SQLITE_OK != create_table(pdb))//创建表
	{
		sqlite3_close(pdb);
		return 0;
	}

	insert_record(pdb);

//	inquire_usecb(pdb);
    inquire_nocb(pdb);

	sqlite3_close(pdb);

    return 0;
}

终端:

judy@judy-virtual-machine:~/桌面/ft$ gcc sjk1.c -osjk1 -lsqlite3
judy@judy-virtual-machine:~/桌面/ft$ ./sjk1
you have opened a sqlite3 database successfull!
please input id  and  name:
2 xu
n_row = 2  n_col = 2
the result of inquire is:
        id      name
         1     zhang
         2        xu

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值