linux学习——数据库API创建

一.API操作

1.int sqlite3_open(char *filename,sqlite3 **db)

功能:打开sqlite数据库

参数:

filename:数据库文件路径

db:指向sqlite句柄的指针 (splite3* db;)

返回值:

成功返回0,失败返回错误码(非0值)

成功返回SQLITE_OK


2.int sqlite3_close(sqlite3 *db);

功能:关闭sqlite数据库

参数:

db 操作数据库的指针

返回值:

成功返回0,失败返回错误码
3.const char *sqlite3_errmsg(sqlite3 *db);

功能:通过DB句柄得到数据库操作的错误信息

参数:

db 操作数据库的指针

返回值:

返回错误信息的首地址

4.int sqlite3_exec(

sqlite3*db,

const char *sql,
int (*callback)(void *,int,char**,char *8)
void *,
char **errmsg);

功能:执行一条sql语句

参数

db:数据库操作句柄

sql:一条sql语句

callback:回调函数,只有sql为查询语句的时候,

才会执行此语句

void * :给回调函数传递参数

errmsg:错误信息

返回值:

成功:SQLITE_OK


int (*callback)(void *,int,char**,char *8)

功能:查询结果,是一个函数指针类型,传递一个函数名

用到第三方库需要 -lsqlite3

回调函数接口:

typedef int(*sqlite3_callback)(

void *para,

int f_num,

char ** f_value,

char ** f_name)

功能: 每找到一条记录自动执行一次回调函数

para:传递给回调函数的参数

f_num:记录中包含的字段数目

f_value:包含每个字段值的指针数组

f_name:包含每个字段名称的指针数组

返回值

成功返回0,失败返回-1

复制代码
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]={0};
        char *errmsg;

        sprintf(sql,"select * from stu");

        if(sqlite3_exec(db,sql,callback,NULL,&errmsg) !=SQLITE_OK)
        {
                printf("%s\n",errmsg);
                exit(0);
        }
        else
        {
                printf("query success\n");
        }
        return 0;
}

不使用回调函数执行SQL语句
int sqlite3_get_table(
sqlite3 *db,
const char *sql,
char ***resultp,
int *nrow, // 相当于行
int *ncolumu,//列
char **errmsg)

功能:执行sql操作

db:数据库句柄

sql:sql语句

resultp:用来指向sql执行结果的指针

nrow:满足条件的记录的数目

ncolumn:每条记录包含的字段数目

errmsg:错误信息指针的地址

返回值:

成功返回0,失败返回错误码

这是没有打印抬头的

复制代码
int  do_query2(sqlite3 *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,&nrow,&ncloumn,&errmsg) !=SQLITE_OK)
        {
                printf("%s",errmsg);
        }
        else
        {
                printf("query success\n");
        }
        index =ncloumn;
        for(i=0;i<nrow;i++)
        {
                for(j=0;j<ncloumn;j++)
                {
                        printf("%-11s",resultp[index++]);
                }
                putchar(10);
        }
}

加上代码之后

复制代码
 for(j=0;j<ncloumn;j++)
        {
                printf("%-11s",resultp[j]);
        }
        putchar(10);

数据库API创建的全部代码

复制代码
#include<stdio.h>
#include<stdlib.h>
#include <sqlite3.h>

#define DATABASE "student.db"
int do_insert(sqlite3 *db)
{
        int id;
        char name[32]={0};
        int score;

        char sql[128]={0};
        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 into stu values(%d,'%s',%d);",id,name,score);

        if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK)
        {
                printf("%s\n",errmsg);
                exit(0);
        }
        else
        {
            printf("insert success\n");
        }

        return 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] ={0};
        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_query1(sqlite3 *db)
{
        char sql[128]={0};
        char *errmsg;

        sprintf(sql,"select * from stu");

        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_query2(sqlite3 *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,&nrow,&ncloumn,&errmsg) !=SQLITE_OK)
        {
                printf("%s",errmsg);
        }
        else
        {
                printf("query success\n");
        }
        index =ncloumn;
        for(j=0;j<ncloumn;j++)
        {
                printf("%-11s",resultp[j]);
        }
        putchar(10);
        for(i=0;i<nrow;i++)
        {
                for(j=0;j<ncloumn;j++)
                {
                        printf("%-11s",resultp[index++]);
                }
                putchar(10);
        }
}
int main()
{
        char *errmsg;
        sqlite3* db;
        int cmd;
        if(sqlite3_open(DATABASE,&db) !=SQLITE_OK)
        {
                printf("%s\n",sqlite3_errmsg(db));
                exit(1);
        }
        else
        {
        printf("open slite3 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));
                exit(1);
        }
        else
        {
                printf("create or open table success\n");
        }
        while(1)
        {
                printf("*********************\n");
                printf("1:insert,2:delete,3:quert,4:update,5:quit\n");
                printf("*********************\n");

                printf("please input cmd\n");
                scanf("%d",&cmd);
                getchar();
                switch(cmd)
                {
                        case 1:
                                do_insert(db);
                                break;
                        case 2:
                                do_delete(db);
                                break;
                        case 3:
                                do_query2(db);
                                break;
                        case 4:

                                do_update(db);
                                break;
                        case 5:
                                sqlite3_close(db);
                                exit(0);
                                break;
                        case 6:
                                printf("err cmd\n");
                }
        }


        return 0;
}
相关推荐
June bug12 小时前
【AI赋能软件测试】6RAG知识库基础
学习·职场和发展
Keep Running *12 小时前
Hermes_学习笔记
笔记·学习
六月雨滴12 小时前
归档日志备份
数据库·oracle·dba
z2005093012 小时前
【linux学习】进程的概念和在linux系统下的基本实现情况01
linux·网络·学习
白露与泡影12 小时前
自己用 ai 写了个链接 mysql 数据库的 mcp 工具
数据库·人工智能·mysql
我是一颗柠檬12 小时前
【MySQL全面教学】MySQL聚合函数与分组Day5(2026年)
数据库·后端·mysql·database
EntyIU12 小时前
Python学习笔记
笔记·python·学习
魔法阵维护师13 小时前
从零开发游戏需要学习的c#模块,第二十四章(场景管理 —— 标题、游戏、结束画面)
学习·游戏·c#
wuxinyan12313 小时前
工业级大模型学习之路025:问题解决-检索质量全为0
人工智能·python·学习·langchain
happymaker062613 小时前
SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)
spring boot·学习·mybatis