首页 > 数据库 >sqlite3数据库

sqlite3数据库

时间:2024-08-28 21:24:21浏览次数:13  
标签:exec 数据库 ret perrmsg sqlite3 NULL pDb

sqlits3 数据库名,创建一个数据库,并打开,有点像vim

.headers on    .mode column可以让输出的更美观一点

 

 //打开一个数据库文件
    ret = sqlite3_open("student.db",&pDb);
    if(ret != SQLITE_OK){
        fprintf(stderr,"sqlite3_open failed! : %s\n",sqlite3_errmsg(pDb));
        return -1;
    }

错误码存放在pDb中所以还要调用sqlite3_errmsg

const char *sqlite3_errmsg(sqlite3*); 获得出错原因

//执行SQL语句

sprintf(tmpbuff,"select *from student;");
ret = sqlite3_exec(pDb,tmpbuff,callback,NULL,&perrmsg);

注意:1.callback回调函数(只有在select语句时会使用,其余SQL语句只需传入NULL),对找到的数据完成要完成的操作

2.perrmsg是申请空间的来的,所以出错必须要释放

int callback(void *arg, int colum,char **pcontent,char **ptitle);

参 数:

 arg:sqlite3_exec给传的参数

 column:找到的一条数据的列数(与SQL语句select后面选择的列数有关)

 pcontent:指针数组的数组名(指向该条数据每一列字符串的首地址)

 ptitle:指针数组的数组名(指向每一列名称字符串首地址的指针数组)

返回值:

成功必须返回0,不能返回其他

#include <stdio.h>
#include <sqlite3.h>
typedef struct student{
    char name[32];
    char sex[4];
    int age;
    double score;
}stu_t;
/********************************************************
 * 函数名:callback
 * 功  能:
 *        处理找到的数据
 * 参  数:
 *      arg:sqlite3_exec给传的参数
 *      column:找到的一条数据的列数(与SQL语句select后面选择的列数有关)
 *      pcontent:指针数组的数组名(指向该条数据每一列字符串的首地址)
 *      ptitle:指针数组的数组名(指向每一列名称字符串首地址的指针数组)
 * 返回值:
 *       成功返回0 
 *       失败返回-1 
 * 注意事项:
 *      1.函数必须返回0,返回非0会sqlite3_exec出错
 *      2.每找到一条匹配的数据,则会调用一次callback,所以callback可能被调多次
 ********************************************************/

int callback(void *arg, int colum,char **pcontent,char **ptitle){
    int i = 0;
    for(i = 0; i < colum; i++){
        printf("%s = %10s           ",ptitle[i],pcontent[i]);
    }
    printf("\n");
    return 0;

}

int main(void){
    int ret = 0;
    sqlite3 *pDb = NULL;
    char *perrmsg = NULL;
    char tmpbuff[1024] = {0};
    int i = 0;

    stu_t s[3] = {
        {"张三","男",18,98.9},
        {"李四","男",10,89.8},
        {"王五","女",20,66.4},
    };

    //打开一个数据库文件
    ret = sqlite3_open("student.db",&pDb);
    if(ret != SQLITE_OK){
        fprintf(stderr,"sqlite3_open failed! : %s\n",sqlite3_errmsg(pDb));
        return -1;
    }

    //执行SQL语句
    //创建表
    sprintf(tmpbuff,"create table if not exists student(id integer primary key asc,name text,sex text,age integer,score double);");
    ret = sqlite3_exec(pDb,tmpbuff,NULL,NULL,&perrmsg);
    if(ret != SQLITE_OK){
        fprintf(stderr,"sqlite3_exec failed! :%s\n",perrmsg);
        sqlite3_free(perrmsg);
        sqlite3_close(pDb);
        return -1;
    }
    //插入数据
    for(i = 0; i < 3; i++){
        sprintf(tmpbuff,"insert into student values(NULL,\"%s\",\"%s\",%d,%lf);",s[i].name,s[i].sex,s[i].age,s[i].score);
        ret = sqlite3_exec(pDb,tmpbuff,NULL,NULL,&perrmsg);
        if(ret != SQLITE_OK){
            fprintf(stderr,"sqlite3_exec failed! :%s\n",perrmsg);
            sqlite3_free(perrmsg);
            sqlite3_close(pDb);
        }
    }
    //查询数据
    sprintf(tmpbuff,"select *from student;");
    ret = sqlite3_exec(pDb,tmpbuff,callback,NULL,&perrmsg);
     if(ret != SQLITE_OK){
        fprintf(stderr,"sqlite3_exec failed! :%s\n",perrmsg);
        sqlite3_free(perrmsg);
        sqlite3_close(pDb);
        return -1;
    }
    sqlite3_close(pDb);
    return 0;
}

标签:exec,数据库,ret,perrmsg,sqlite3,NULL,pDb
From: https://blog.csdn.net/m0_61965705/article/details/141436714

相关文章

  • sqlite3使用记录
    参考资源SQLite简介|菜鸟教程(runoob.com)Ubuntu下sqlite3的安装及使用安装步骤安装:sudoapt-getinstallsqlite3查看版本:sqlite-version安装Sqlite3编译需要的工具包:sudoapt-getinstalllibsqlite3-dev语法说明注意(1)sqlite语法忽略大小写的区别,除了GLOB等......
  • 【爬虫实战】——利用bs4和sqlalchemy操作mysql数据库,实现网站多行数据表格爬取数据
    前言此篇接上一篇的内容,在其基础上爬取网站的多行表格数据,以及把数据写入到mysql数据库中目录一、定位表格查找元素二、提取数据三、写入mysql数据库四、附录一、定位表格查找元素首先打开网站,如图需要爬取多行数据的表格,利用查找元素定位,看图中分析得知我要爬取的是tr......
  • 数据库-外键
    一、外键定义:让一张表记录的数据不要太过于冗余,在数据库汇中对表的关系进行解耦,尽量让数据的单一化二、外键作用:保持数据的一致性和完整性三、mysql的存储引擎(1)MyISAM默认引擎(2)innodb(外键需要用到innodb存储格式)格式:showtablestatusfrom库名where......
  • 软件设计师全套备考系列文章13 -- 数据库:概念、三级模式两级映像、设计过程、数据模型
    软考--软件设计师(13)--数据库:概念、三级模式两级映像、设计过程、数据模型文章目录软考--软件设计师(13)--数据库:概念、三级模式两级映像、设计过程、数据模型前言一、章节考点二、基本概念三、三级模式、两级映像四、设计过程五、数据模型前言考试时间:每年5月、......
  • 【MySQL数据库管理问答题】第9章 优化查询性能
    目录1.请说明EXPLAIN语句的作用。2.为什么使用索引会比全表扫描可以提供更好的查询性能?3.MySQL数据库是如何自动维护索引统计信息的。4.mysqlcheck客户机程序都有哪些功能?5.在性能分析期间使用InvisibleIndexes有什么好处?6.什么是直方图(histograms),它在使用......
  • 【MySQL数据库管理问答题】第10章 选择备份策略
    目录1.请详细说明热备、温备和冷备的特点和不同。2.在MySQL中支持的备份类型有哪几种,分别予以说明。3.执行逻辑备份要具备哪些条件,其优缺点在哪。4.物理备份一般是用来满足什么样的数据库维护需求?5.基于快照的备份能否用来进行数据库损坏时的恢复,请说明理由。6.......
  • 【MySQL数据库管理问答题】第8章 维护稳定的系统
    目录1.请说明一个稳定的系统的具体含义。2.在确定数据库失败原因时,都要考虑哪些方面的因素?3.如何查看InnoDB表所占用的实际存储空间大小?4.谈谈对数据库进行纵向扩展和横向扩展的适用场合。5.说出在判断一个数据库性能问题时的一般性思路或步骤。6.请对InnoDB......
  • openGauss-Anomaly_detection_数据库指标采集_预测与异常监控
    Anomaly-detection:数据库指标采集、预测与异常监控可获得性本特性自openGauss1.1.0版本开始引入。特性简介anomaly_detection是openGauss集成的、可以用于数据库指标采集、预测以及异常监控与诊断的AI工具,是dbmind套间中的一个组件。支持采集的信息包括IO_Read、IO_Write、CPU......
  • 【Statement】Mybatis操作数据库核心
    StatementstatementStatement的类型使用场景在MyBatis中的配置核心标签1.`<select>`标签2.`<insert>`标签3.`<update>`标签4.`<delete>`标签总结statement在MyBatis中,Statement是用于执行SQL语句的核心组件之一。它对应JDBC中的java.sql.Statem......
  • 数据库-索引
    一、索引定义:索引是一种数据结构,用来约束一列值二、索引优点1、保证数据的唯一性2、实现表与表之间的参照性3、减少排序和分组的时间4、提高查询具体数据的速度三、索引缺点:1、索引占物理内存2、进行增删改查也到索引进行动态维护四、索引的分类1、普通索引(效果无不变......