linux系统编程:数据库

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

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

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

sqlite相关的命令

.tables 查看数据库中的表

.headers on/off 开启或者关闭表头

.mode column 列对齐

.width 列宽1 列宽2 设置每一列的列宽

.schema 表名 查看表的结构

sqlite的SQL语句

每个sql语句后面必须要有一个;

INTEGER : 整形

REAL: 浮点型

TEXT:文本类型,字符串

NULL : 空

1.创建表

create table 表名(列名1 数据类型 ,列名2 数据类型, 类名3 数据类型) ;

  1. 插入数据

insert into 表名 values(值1, 值2, 值3);

  1. 查询

select 列名1,列名2 from 表名;

select * from 表名;

条件查找:

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

like : 模糊匹配

% 可以通配多个字符

_ 只能通配一个字符

升序排列

select * from 表名 order by 列名 ASC;

降序排列:

select * from 表名 order by 列名 DESC;

  1. 删除一行

delect from 表名 where 列名 关系运算符 值;

  1. 删除一张表

drop 表名;

  1. 修改

update 表名 set 列名=新值 where 列=值;

  1. 设置主键值自动增长列

  2. 主键值自动增长列的数据类型必须是INTEGER

  3. 类名 INTEGER PRIMARY KEY AUTOINCREMENT,

8 .多表联查

内连接 INNER JOIN

外连接 LEFT OUTER JOIN

  1. 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

失败:错误码

cs 复制代码
#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.每找到一行,回调被触发一次

  1. 回调函数必须返回0
cs 复制代码
#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;
}
相关推荐
4SAPI5 分钟前
2026年大模型API接入选型指南:企业与个人用户的架构、稳定性与成本考量
大数据·开发语言·数据库·人工智能·架构·php
xixiaoyunya19 分钟前
只备份数据远远不够:服务器系统备份的完整方案与实践
服务器·网络·数据库
大模型丫丫43 分钟前
LangGraph + MCP(Model Context Protocol)完整讲解
java·开发语言·数据库
我不是程序员三三1 小时前
怎么监控电脑?企业办公终端监控建设实战与合规要点
服务器·数据库·电脑
这个DBA有点耶1 小时前
时间序列数据库选型2026:5款主流产品深度对比与场景适配
大数据·数据库·程序人生·架构·时序数据库·dba·数据库管理员
砚底藏山河1 小时前
拉数管道设计:从一次性脚本到可重启的数据流水线(魔码量化实战 #01)
java·数据库·python·金融·maven
2601_966377131 小时前
运营商密评密改落地实践:透明加密解决密码应用合规与安全痛点
数据库·安全·oracle
伯恩bourne1 小时前
Qdrant 快速入门 :数据模型介绍
服务器·数据库·人工智能
AgentMaster1 小时前
元数据、血缘、质量、安全四大模块能力拆解,数据治理方案对比:4 种技术路线深度评测
大数据·数据库·数据仓库·人工智能·原型模式
tryxr2 小时前
Redis 的背景知识
数据库·redis·缓存