sqlite3 数据库的简单实用示例

1、创建数据库
sqlite3 *db = NULL;
int result = sqlite3_open(db_name,&db); //数据库的名字,和一个sqlite3类型变量

2、创建标头
sprintf(sql,"create table %s (id int,name varchar,score int)",db_name);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);

3、插入
sprintf(sql,"insert into %s values (%d,\"%s\",%d)",
db_name,stu->id,stu->name,stu->score); //插入的时候,有几列就必须写几样,否则写入不进去数据库
sqlite3_exec(db,sql,NULL,NULL,&errmsg);

4、打印
(1)sprintf(sql,"select * from %s",db_name);
sqlite3_exec(db,sql,show_myinfo,NULL,&errmsg);
(2)sprintf(sql,"select * from %s",db_name);
sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);

5、删除
sprintf(sql,"delete from %s where id=%d",db_name,id);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);

6、查找
(1)sprintf(sql,"select * from %s where name='%s'",db_name,name);//查找名字%s必须要加上'',[]加不加都可以,from千万别打错了
sqlite3_exec(db,sql,show_myinfo,(void *)sql,&errmsg);
(2)sprintf(sql,"select * from %s where [id]='%d'",db_name,id);
sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);

7、排序
(1)sprintf(sql,"select * from %s order by name",db_name);
sqlite3_exec(db,sql,show_myinfo,NULL,&errmsg);
(2)sprintf(sql,"select * from %s order by id",db_name);
sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);

8、关闭数据库
sqlite3_close(db);
 
demo示例:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include"sqlite3.h"

typedef struct str
{
 int id;
 char name[30];
 int score;
}STU;

/****************************************************
* 语法格式:int show_myinfo(void *para,int n_column,
     char **column_value,char **column_name)  
* 功能描述:是回调函数指针,当这条语句 执行之后,sqlite3会去调用你提供的这个函数。
* 参数类型:para=当执行sqlite3_exec的时候传递给回 调函数的参数。
     n_column=结果集的列数
     column_value=结果集中某一行信息的一维数组 的地址。
     column_name=结果集中每列列名的数组的地址。 回调函数的返回值:若为非0值,则通知 sqlite3_exec终止回调。
* 返回描述:整形
******************************************************/
int show_myinfo(void *para,int n_column,
    char **column_value,char **column_name)
{
 int i = 0;
// printf("para = %d\n",*((int *)para));
// printf("n_column=%d\n",n_column);
// for(i=0;i<n_column;i++)
// {
//  printf("%s\t",column_name[i]);
// }

 for(i=0;i<n_column;i++)
 {
  printf("%s\t",column_value[i]);
 }
 printf("\n");
 return 0;
}

/****************************************************
* 语法格式:sqlite3 *create_db(char *db_name)  
* 功能描述:打开数据库
* 参数类型:db_name=数据库文件名,必需是(UTF-8)编码。
* 返回描述:返回数据指针
******************************************************/
sqlite3 *create_db(char *db_name)
{
 sqlite3 *db = NULL;
 int result = sqlite3_open(db_name,&db);
 if(result)
 {
  printf("sqlite3_open %s error\n",db_name);
  sqlite3_close(db);
  _exit(-1);
 }
 else
 {
  printf("create %s succeed!\n",db_name);
 }
 return db;
}

/****************************************************
* 语法格式:void create_db_table(sqlite3 *db,char *db_name) 
* 功能描述:创建表头 id name score
* 参数类型:db=数据库指针,db_name=数据库名
* 返回描述:无
******************************************************/
void create_db_table(sqlite3 *db,char *db_name)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"create table %s (id int,name varchar,score int)",db_name);
 sqlite3_exec(db,sql,NULL,NULL,&errmsg);
 
}

/****************************************************
* 语法格式:void insert_db(sqlite3 *db,char *db_name,STU *stu)  
* 功能描述:插入数据
* 参数类型:db=数据库指针,db_name=数据库名,stu=插入数据的结构体
* 返回描述:无
******************************************************/
void insert_db(sqlite3 *db,char *db_name,STU *stu)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"insert into %s values (%d,\"%s\",%d)",
     db_name,stu->id,stu->name,stu->score); //插入的时候,有几列就必须写几样,否则写入不进去数据库。不应该啊??
 
 sqlite3_exec(db,sql,NULL,NULL,&errmsg);

}

/****************************************************
* 语法格式:void print_db_exec(sqlite3 *db,char *db_name)  
* 功能描述:使用sqlite3_exec函数获取数据库信息,并打印出来
* 参数类型:db=数据库指针,db_name=数据库名,
* 返回描述:无
******************************************************/
void print_db_exec(sqlite3 *db,char *db_name)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"select * from %s",db_name);
 sqlite3_exec(db,sql,show_myinfo,NULL,&errmsg);
 
}
/****************************************************
* 语法格式:void print_db_get_table(sqlite3 *db,char *db_name) 
* 功能描述:使用sqlite3_get_table函数获取数据库信息,并打印出来
* 参数类型:db=数据库指针,db_name=数据库名,
* 返回描述:无
******************************************************/
void print_db_get_table(sqlite3 *db,char *db_name)
{
 char sql[100] = "";
 char *errmsg = NULL;
 char **dbResult = NULL;
 int row = 0,col = 0,i = 0,j = 0,index = 0;
 sprintf(sql,"select * from %s",db_name);
 sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);
// printf("ddddddddddrow=%d,col=%d\n",row,col);
 for(i=0;i<row+1;i++)
 {
  for(j=0;j<col;j++)
  {
   printf("%s\t",dbResult[index]);
   ++index;
  }
  printf("\n");
 }
}

/****************************************************
* 语法格式:void delete_db_by_id(sqlite3 *db,char *db_name,int id)
* 功能描述:通过id号删除数据库中的一行数据
* 参数类型:db=数据库指针,db_name=数据库名,id=数据库中的id号
* 返回描述:无
******************************************************/
void delete_db_by_id(sqlite3 *db,char *db_name,int id)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"delete from %s where id=%d",db_name,id);
 sqlite3_exec(db,sql,NULL,NULL,&errmsg);

}
/****************************************************
* 语法格式:void find_db_by_name_exec(sqlite3 *db,char *db_name,char *name)
* 功能描述:使用sqlite3_exec函数,通过名字查找数据库中的内容
* 参数类型:db=数据库指针,db_name=数据库名,name=数据库中的name号
* 返回描述:无
******************************************************/
void find_db_by_name_exec(sqlite3 *db,char *db_name,char *name)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"select * from %s where name='%s'",db_name,name);//查找名字%s必须要加上'',[]加不加都可以,from千万别打错了
 sqlite3_exec(db,sql,show_myinfo,(void *)sql,&errmsg);
}
/****************************************************
* 语法格式:void find_db_by_id_get_table(sqlite3 *db,char *db_name,int id)
* 功能描述:使用sqlite3_get_table函数,通过id号查找数据库中的内容
* 参数类型:db=数据库指针,db_name=数据库名,id=数据库中的id号
* 返回描述:无
******************************************************/
void find_db_by_id_get_table(sqlite3 *db,char *db_name,int id)
{
 char sql[100] = "";
 char *errmsg = NULL;
 char **dbResult = NULL;
 int row,col,i,j;
 int index = 0;
 sprintf(sql,"select * from %s where [id]='%d'",db_name,id);
 sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);
 
// printf("row=%d,col=%d,errmsg=%s\n",row,col,errmsg);
 for(i=0;i<row+1;i++)
 {
  for(j=0;j<col;j++)
  {
   printf("%s\t",dbResult[index++]);
  }
  printf("\n");
 }
}
/****************************************************
* 语法格式:void order_db_by_name_exec(sqlite3 *db,char *db_name)
* 功能描述:使用sqlite3_exec函数,通过名字排序数据库中的内容
* 参数类型:db=数据库指针,db_name=数据库名
* 返回描述:无
******************************************************/
void order_db_by_name_exec(sqlite3 *db,char *db_name)
{
 char sql[100] = "";
 char *errmsg = NULL;
 sprintf(sql,"select * from %s order by name",db_name);
 sqlite3_exec(db,sql,show_myinfo,NULL,&errmsg);
}
/****************************************************
* 语法格式:void order_db_by_id_get_table(sqlite3 *db,char *db_name)
* 功能描述:使用sqlite3_get_table函数,通过id号排序数据库中的内容
* 参数类型:db=数据库指针,db_name=数据库名
* 返回描述:无
******************************************************/
void order_db_by_id_get_table(sqlite3 *db,char *db_name)//排序之后不会改变原来数据中数据的位置
{
 char sql[100] = "";
 char *errmsg = NULL;
 char **dbResult = NULL;
 int row,col;
 sprintf(sql,"select * from %s order by id",db_name);
 sqlite3_get_table(db,sql,&dbResult,&row,&col,&errmsg);

 print_db_get_table(db,db_name);
}

int main(void)
{
 sqlite3 *db = NULL;

 STU stu;
 stu.id = 76;
 strcpy(stu.name,"halo");
 stu.score = 55;
 
 db = create_db("../test/aaaaaa.db");
 create_db_table(db,"aaaaaa");
 insert_db(db,"aaaaaa",&stu);
 
// print_db_exec(db,"aaaaaa");
 
 printf("**********************************\n");
 
// delete_db_by_id(db,"aaaaaa",stu.id);
 
 print_db_get_table(db,"aaaaaa");
 
// printf("\n**********************************\n");
// find_db_by_name_exec(db,"aaaaaa","lihuibo");
// find_db_by_id_get_table(db,"aaaaaa",1);

 printf("\n**********************************\n");
// order_db_by_name_exec(db,"aaaaaa");

 order_db_by_id_get_table(db,"aaaaaa");
 
 sqlite3_close(db);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值