SQLite3数据库 的API(C、CPP)

API手册 functionlist

相关文档文件已打包,存储于云盘/Linux 文件夹下 文件名为:sqlite-doc-3071700.rar


sqlite3_open 函数

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

功能:打开数据库
参数:filename 数据库名称
ppdb 数据库句柄
返回值:成功为0 SQLITE_OK ,出错 错误码

sqlite3_close(sqlite3*) 函数

int sqlite3_close(sqlite3*);

功能:关闭数据库
参数: sqlite3数据库句柄
返回值: 成功为0 SQLITE_OK , 出错 错误码

sqlite3_errmsg 函数

 const char *sqlite3_errmsg(sqlite3*db);

功能:得到错误信息的描述
参数: sqlite3数据库句柄
返回值: 错误描述字符串的首地址

sqlite3_exec 函数

 int sqlite3_exec(
   sqlite3* db,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void* arg,int,char**,char**),  /* Callback function */
  void * arg,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
  );

功能:执行一条sql语句
参数:db 数据库句柄
sql sql语句
callback 回调函数,只有在查询时,才传参
arg 为回调函数传递参数
errmsg 错误消息
返回值:成功 SQLITE_OK

sqlite3_exec 的回调函数

typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);

功能:每找到一条记录自动执行一次回调函数
参数:
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1

sqlite3_get_table 函数

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);

功能:执行SQL操作 (不使用回调函数 执行SQL语句)
参数:
db:数据库句柄
sql:SQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址
返回值:成功返回0 SQLITE_OK 失败返回错误码

代码示例: 学生成绩管理系统-sqlite版

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

#include <string.h>

#define FILEADDR "std.db"
void sqlinsert(sqlite3* db);
void sqldelete(sqlite3* db);
void sqlquery(sqlite3* db);
void sqlupdate(sqlite3* db);
int sqlcallback(void *para, int f_num, char **f_value, char **f_name);
void sqltable(sqlite3 *db);


int main()
{
   sqlite3* db = NULL; 
   int sqlErr = 0,cmd = 0;
   char strsql[128] = {0};
   char* errmsg;
   /* 打开sqlite 获取句柄 */
   sqlErr = sqlite3_open(FILEADDR,&db);
   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   	return -1;
   }
   else{
   	printf("Success for open sqlist3\n");
   }

   /* 创建一张表 */
   strcpy(strsql,"create table stu(id integer,name char,age integer,score float);");
   sqlErr = sqlite3_exec(db,strsql,NULL,NULL,&errmsg);
   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   }
   else{
   	printf("Create table done.");
   }
   while(1)
   {
   	printf("***********************************************\n");
   	printf("1.insert 2.delete 3.query 4.update 5.quit\n");
   	printf("***********************************************\n");

   	scanf("%d",&cmd);
   	switch(cmd)
   	{
   	case 1: sqlinsert(db);break;
   	case 2: sqldelete(db);break;
   			//case 3: sqlquery(db);break;
   	case 3: sqltable(db);break;		
   	case 4: sqlupdate(db);break;
   	case 5: return 0;

   	default: printf("Error: cmd \n");break;
   	}
   }
   return 0;
}


void sqlinsert(sqlite3* db)
{
   int id,age;
   float score;
   char name[32];
   int sqlErr = 0;
   char strsql[128] = {0};
   char* errmsg;

   printf("begin to insert message:\n");
   fflush(stdin);
   printf("id:");
   scanf("%d",&id);
   fflush(stdin);
   printf("name:");
   scanf("%s",name);
   fflush(stdin);
   printf("age:");
   scanf("%d",&age);
   fflush(stdin);
   printf("score:");
   scanf("%f",&score);
   fflush(stdin);
   sprintf(strsql,"insert into stu values(%d,'%s',%d,%f);",id,name,age,score);
   sqlErr = sqlite3_exec(db,strsql,NULL,NULL,&errmsg);

   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   	return;
   }
   else{
   	printf("Success for insert\n");
   }

   return;
}


void sqldelete(sqlite3* db)
{
   int id;
   int sqlErr = 0;
   char strsql[128] = {0};
   char* errmsg;
   printf("begin to delete message:\n");
   printf("id:");
   scanf("%d",&id);
   sprintf(strsql,"delete from stu where id = %d;",id);
   sqlErr = sqlite3_exec(db,strsql,NULL,NULL,&errmsg);

   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   	return;
   }
   else{
   	printf("Success for delete\n");
   }

   return;
}

void sqlquery(sqlite3* db)
{
   char strsql[128];
   char* errmsg;

   printf("begin to sqerry message:\n");
   sprintf(strsql,"select * from stu;");

   if(sqlite3_exec(db,strsql,sqlcallback,NULL,&errmsg)!=SQLITE_OK)
   {
   	printf("%s\n",errmsg);
   }
   else
   {
   	printf("Success for query\n");
   }
   return;
}

void sqlupdate(sqlite3* db)
{
   int id;
   float score;
   int sqlErr = 0;
   char strsql[128] = {0};
   char* errmsg;
   printf("begin to update message:\n");
   printf("id:");
   scanf("%d",&id);
   printf("Update score:");
   scanf("%f",&score);
   sprintf(strsql,"update stu set score = %f where id = %d;",score,id);
   sqlErr = sqlite3_exec(db,strsql,NULL,NULL,&errmsg);

   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   	return;
   }
   else{
   	printf("Success for update\n");
   }

   return;
}

int sqlcallback(void *para, int f_num, char **f_value, char **f_name)
{
   int i = 0;
   for(i=0;i < f_num;i++){
   	printf("%-10s ",f_value[i]);
   }
   printf("\n");

   return 0;
}

void sqltable(sqlite3 *db)
{
   char** pazResult;
   int sqlErr = 0,pnRow,pnColumn;
   char strsql[128] = {0};
   char* errmsg;
   sprintf(strsql,"select * from stu;");
   sqlErr = sqlite3_get_table(db,strsql,&pazResult,&pnRow,&pnColumn,&errmsg);

   if(sqlErr != SQLITE_OK){
   	printf("%s\n",sqlite3_errmsg(db));
   	return;
   }
   else{
   	printf("Success for update\n");
   }
   int i,j,index;
   for(i=0,index=0;i<pnRow;i++)
   {
   	for(j=0;j<pnColumn;j++,index++)
   	{
   		printf("%-11s",pazResult[index]);
   	}
   	printf("\n");
   }
   return;
}

效果展示: