linux系统编程:数据库

1.

数组、链表、变量-----》内存:程序运行结束、掉电数据丢失

文件----------------------》硬盘:程序运行结束、掉电数据不丢失

数据库: 专业存储数据、大量数据-----》硬盘

 sqlite相关的命令
      .tables                         查看数据库中的表
      .headers on/off            开启或者关闭表头
      .mode column              列对齐
      .width 列宽1 列宽2      设置每一列的列宽
      .schema  表名              查看表的结构

sqlite的SQL语句
        每个sql语句后面必须要有一个;
        INTEGER : 整形
        REAL: 浮点型
        TEXT:文本类型,字符串
        NULL : 空
       1.创建表
          create table 表名(列名1 数据类型 ,列名2 数据类型, 类名3 数据类型) ;

       2. 插入数据
           insert into 表名 values(值1, 值2, 值3);

       3. 查询
          select 列名1,列名2  from 表名;
          select *  from 表名;

     条件查找:
          select *  from 表名 where 列 关系运算符 (> < = != >= <= and or);

 like : 模糊匹配

         % 可以通配多个字符
        _  只能通配一个字符

        升序排列
        select * from 表名 order by 列名 ASC;
        降序排列:
        select * from 表名 order by 列名 DESC;
    4. 删除一行
        delect from 表名 where 列名 关系运算符 值;
    5. 删除一张表
        drop 表名;      

    6. 修改    
        update 表名 set 列名=新值 where 列=值;

    7. 设置主键值自动增长列
        1. 主键值自动增长列的数据类型必须是INTEGER
        2. 类名 INTEGER PRIMARY KEY AUTOINCREMENT,

    8 .多表联查
         内连接   INNER JOIN

        
         外连接   LEFT OUTER JOIN         

  

3. sqlite3提供的c/c++ API接口

     int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
    功能:打开数据库,如果不存在,则创建
    参数:
               filename : 数据库名称
               ppDb   :保存数据库句柄的地址   
    返回值:
               成功:SQLITE_OK
               失败:错误码  

int sqlite3_exec(
  sqlite3*pdb,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *arg,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);
功能:执行sql语句
参数:
          pdb : 数据库句柄
         sql : 要执行的sql语句的首地址
        callback : 当执行select语句时,使用到
        arg:当执行select语句时,使用到,传递给回调函数的第一个参数
       errmsg :存储错误信息的地址                             
返回值:
              成功:SQLITE_OK
               失败:错误码  

#include<stdio.h>
#include<sqlite3.h>
int main(int argc,char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./sth.db",&pdb);if(ret != SQLITE_OK){fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(pdb));return -1;}char *sql = "create table if not exists class4(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL);";ret = sqlite3_exec(pdb,sql,NULL,NULL,NULL);if(ret != SQLITE_OK){fprintf(stderr,"sqlite3_exec fail:%s\n",sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}char *sql1 = "insert into class4 values(NULL,\"zhangsan\",99);";char *sql2 = "insert into class4 values(NULL,\"lisi\",89);";char *sql3 = "insert into class4 values(NULL,\"wangwu\",67);";sqlite3_exec(pdb,sql1,NULL,NULL,NULL);sqlite3_exec(pdb,sql2,NULL,NULL,NULL);sqlite3_exec(pdb,sql3,NULL,NULL,NULL);sqlite3_close(pdb);return 0;
}

int (*callback)(void*,int column_cnt,char**column_value,char**column_name), 

int callback(void* arg, int , char **, char **);
功能:在使用sqlite3_exec执行select语句时, 每查找到一条数据,则调用一次回调
参数:
         arg : sqlite3_exec传递的第4个参数
         column_cnt: 查找到的数据的列数
         column_value:  查找到的一行数据的每一列值的地址的集合
         column_name:查找到的一行数据的每一列列名的地址的集合
返回值:
          成功 :1     失败:0

注意:1.每找到一行,回调被触发一次
           2. 回调函数必须返回0

#include<stdio.h>
#include<sqlite3.h>
int flag = 0;
int callback(void *arg,int column_cnt,char **column_value,char **column_name)
{if(0 == flag){for(int i = 0;i < column_cnt;++i){printf("%s ",*(column_name + i));}printf("\n");flag = 1;}for(int i = 0;i < column_cnt;++i){printf("%s ",*(column_value + i));}printf("\n");return 0;
}
int callback1(void *arg,int column_cnt,char **column_value,char **column_name)
{printf("%s\n",*column_value);return 0;
}
int main(int argc,char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./sth.db",&pdb);if(ret != SQLITE_OK){fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(pdb));return -1;}char *sql = "select name from class4;";ret = sqlite3_exec(pdb,sql,callback1,NULL,NULL);if(ret != SQLITE_OK){fprintf(stderr,"sqlite3_exec fail:%s\n",sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sqlite3_close(pdb);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

库克库伯防爆电容器会起火吗

库克库伯&#xff08;Cooke Colb&#xff09;防爆电容器设计用于在具有爆炸性气体或粉尘的危险环境中安全运行。尽管这些防爆电容器经过严格的设计和测试&#xff0c;能够保障不会出现爆炸现象&#xff0c;以确保在恶劣环境中运行时的安全性&#xff0c;但在某些极端情况下&…

[数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;303 标注数量(xml文件个数)&#xff1a;303 标注数量(txt文件个数)&#xff1a;303 标注类别…

【网络安全】Instagram 和 Meta 2FA 绕过漏洞

未经许可,不得转载。 文章目录 漏洞概述技术细节Meta 2FA 绕过步骤Instagram 2FA 绕过步骤总结漏洞概述 该漏洞允许攻击者在具有受害者Facabook账户权限的情况下,绕过 Meta 的双重身份验证 (2FA) 机制,实现账户接管;并且也能够绕过 Instagram 的双重身份验证 (2FA) 机制,…

【GeoScenePro】Generic Server Error

错误 解决方案 在portal中进行知识图谱许可授权

国密起步5:GmSSL3交叉编译arm64

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 之前已经建立好了交叉编译环境…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…

sqli-labs靶场(56-60)

56关 ?id-1)union select 1,2,database()-- 看数据库 ?id-1) union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- 看表 ?id-1) union select 1,group_concat(column_name),3 from information_schema.columns wh…

深入探索MySQL数据库结构设计:实战案例解析,打造高效、可扩展的数据存储方案

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 前言&#xff1a;…

noge-gyp构建项目踩坑记录

开发环境 系统: win11 node: 19.7.0 npm: 8.3.2 node-gyp: 10.0.2可以不使用windows-build-tools来安装构建工具,手动进行安装 我这边用windows-build-tools安装时候会提示 process.env only accepts a configurable, writable, and enumerable data descriptor. 查了资料后…

转换视频格式轻松搞定!3个小窍门助你轻松将mxf格式转mp4

你是否因为格式转换而烦恼&#xff1f;你是否经历过这样的情况&#xff1a;你想要在别的设备或平台上播放心仪的视频&#xff0c;但是你的视频文件是xmf格式的&#xff0c;很多设备都不支持这个格式&#xff0c;导致视频无法播放。现在&#xff0c;你需要把mxf格式转mp4格式。你…

【时间盒子】-【2.准备】HarmonyOS 开发前需要准备什么?

零基础新手或转行进入鸿蒙生态应用的开发者&#xff0c;请提前准备以下内容&#xff1a; 一、注册华为帐号 此帐号在华为官方各平台通用&#xff0c;比如&#xff1a;华为手机、华为商城、华为云、华为开发者联盟等等。 https://id1.cloud.huawei.com/CAS/portal/userRegist…

如何在Windows和Mac上免费提取RAR文件?这里有方法

序言 你有没有下载过一个文件,却发现它有一个奇怪的.rar文件扩展名?RAR是一种压缩文件格式,与ZIP文件非常相似,在本文中,我们将向你展示如何在Windows或macOS上打开RAR文件。 如何在Windows 11上打开RAR文件 Windows 11在2023年增加了对RAR文件的原生支持。从那时起,你…

144. 腾讯云Redis数据库

文章目录 一、Redis 的主要功能特性二、Redis 的典型应用场景三、Redis 的演进过程四、Redis 的架构设计五、Redis 的数据类型及操作命令六、腾讯云数据库 Redis七、总结 Redis 是一种由 C 语言开发的 NoSQL 数据库&#xff0c;以其高性能的键值对存储和多种应用场景而闻名。本…

可重入VI,VI模板和动态VI之间的差异 转

可重入VI 当您想要同时运行同一VI的多个实例时&#xff0c;将使用可重入VI。当VI不可重入时&#xff0c;VI只有一个数据空间。因此&#xff0c;一次只能有一个调用者运行VI&#xff0c;因此调用者可能必须“等待轮到它”时才能使用VI。这是VI的默认选项&#xff0c;但您可以将V…

Hibernate 批量插入速度慢的原因和解决方法

由于业务需要一次性连续写入超过10k条以上的新数据&#xff0c;当对象超过10个成员变量以后&#xff0c;整个写入过程居然需要长达35秒&#xff0c;这个速度是不能接受的&#xff0c;故此研究了一下怎么开启Hibernate批量写入的功能。 我这边使用的是Hibernate 5.6.15 在网上…

【Java|Stream流】不可变集合

文章目录 1.什么是不可变集合2.创建不可变集合的方式2.1 List类型2.2 Set2.3 Map 1.什么是不可变集合 不可变集合:不可以被修改的集合 不可变集合优点: 安全性 由于不可变集合不能被修改&#xff0c;所以可以安全地在多个线程之间共享&#xff0c;而不用担心被意外修改&#xf…

【kubernetes】Service 介绍和应用

一&#xff0c;Service介绍 四层代理是基于传输层&#xff08;第四层&#xff09;工作的代理&#xff0c;主要在传输层&#xff08;如TCP、UDP协议&#xff09;上转发和管理数据流 七层代理是基于应用层&#xff08;第七层&#xff09;工作的代理&#xff0c;能够对应用层协议…

# 利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优--2

利刃出鞘_Tomcat 核心原理解析&#xff08;十&#xff09;-- Tomcat 性能调优–2 二、Tomcat专题 - Tomcat性能调优 - 性能测试结果说明 1、压力性能测试 # 打开另一个终端&#xff0c;切换目录 [rootbogon ~]# cd /usr/local/tomcat# 进行压力性能测试[rootbogon tomcat]# …

JSON处理库 -- Fastjson

文章目录 一、json格式1.1 用途1.2 语法1.3 常见格式 二、fastjson常用类2.1 JSONObject2.2 JSONArray 三、序列化和反序列化3.1 默认序列化与反序列化3.2 序列化的扩展3.3 自定义序列化SerializeFilter3.4 JSONField 注解3.5 复习Jackson 一、json格式 1.1 用途 一种轻量级的…

浅谈SpringMvc的核心流程与组件

一、SpringMvc的核心流程 当发起请求时被前置的控制器(DispatcherServlet)拦截到请求&#xff0c;根据请求参数生成代理请求&#xff0c;找到请求对应的实际控制器&#xff0c;控制器处理请求&#xff0c;创建数据模型&#xff0c;访问数据库&#xff0c;将模型响应给中心控制…