数据库;SQL语言; 数据库编程

news2024/11/24 18:33:03

数据库:
    1.概念:
        文件:存放数据,掉电数据不会丢失,软件的配置及想要持续保存的数据放入文件中
        大批量数据存储和管理时使用数据库 

 2.类型:
        1.关系型数据库 
            1.Oracle 
              DB2

            2.MySQL 
              开源 
               
            3.sqlserver

            4.sqlite 
              小型数据库  

        2.非关系型数据库
            1.Redis  

    3.SQL语言 
        数据库支持的编程语言,主要对表完成:增、删、改、查相关功能

4.安装sqlite数据库 

5.sqlite3命令:.quit 等

 6.SQL语句:
        create table 
        创建表
        使用形式:
            create table 表名称(列1 数据类型, 列2 数据类型, ...);
        示例:
            create table student(姓名 text, 性别 text, 年龄 integer, 成绩 double);

        insert into 
        插入表
        使用形式:
            insert into 表名称 values(值1, 值2, ...);
        示例:
            insert into student values("张三", "男", 19, 89.5);
            insert into student values("李四", NULL, NULL, 99.99);
            insert into student (姓名, 年龄) values ("王二", 18);

        select  
        查看表  
        使用形式: 
            select 列1,列2,... from 表名称 where 匹配条件 order by 列名称 asc/desc;
        示例:
            select * from 表名称; 
            select 姓名,成绩 from student;
            select 姓名,成绩 from student where 姓名 like "%张%";
            select 姓名,成绩 from student order by 成绩 desc;
            select 姓名 from student where 成绩 > 85 order by 成绩 desc;

        delete from 
        删除表
        使用形式:
            delete from student where 匹配条件; 
        示例:
            select 姓名 from student where 成绩 > 85 order by 成绩 desc;

        update 
        更新表
        使用形式:
            update 表名称 set 列1=值1,列2=值2 where 匹配条件;
        示例:
            update student set 性别="女", 成绩=86.3 where 姓名="王二";

        drop table
        删除表 
        使用形式:
            drop table 表名称;

7.数据库文件格式:
        数据库文件  ->  表 -> 列1  列2 列3 
        filename.db          ...  
     
    8.内键:
        1.一般为整形
        2.区分一张表中不同的数据(内键的值不允许重复)
    9.与外部关联的键值
        与外部表关联的键值 

        学生信息表/
        成绩表/
        课程表

    10.多表联合查询
       1.cross join:
         交叉连接 
         将表1中的每一项都与表2中所有项连接获得一张新表 

         示例:
         select student.name as 姓名, lesson.subject as 科目 from student cross join lesson;
         select student.name as 姓名, lesson.subject as 科目 from student cross join lesson where 科目 like "语文";
    
       2.inner join:
         内连接
         将表1和表2中所有同时满足条件的数据关联在一起

 3.outer join
          外连接

数据库编程: 
    1.安装sqlite3库文件 
        sudo apt-get install libsqlite3-dev 

    2.sqlite3函数接口:
        1.sqlite3_open 
        int sqlite3_open(
            const char *filename,   /* Database filename (UTF-8) */
            sqlite3 **ppDb          /* OUT: SQLite db handle */
        );

        功能:
            打开一个数据库文件
        参数:
            filename:数据库文件名称 
            ppDb:数据库句柄
        返回值:
            成功返回SQLITE_OK
            失败返回错误码

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

        2.sqlite3_exec 
          int sqlite3_exec(
            sqlite3*,                                  /* An open database */
            const char *sql,                           /* SQL to be evaluated */
            int (*callback)(void*,int,char**,char**),  /* Callback function */
            void *,                                    /* 1st argument to callback */
            char **errmsg                              /* Error msg written here */
          );
          功能:
            执行SQL语句
          参数:
            sqlite3*:数据库句柄
            sql:要执行的SQL语句字符串的首地址 
            callback:回调函数(只有在select语句时会使用,其余SQL语句只需传入NULL),对找到的数据要完成的操作
            void *:给回调函数的参数 
            char **:存放错误信息空间首地址
          返回值:
            成功返回SQLITE_OK 
            失败返回错误码 

        3.sqlite3_close   
          int sqlite3_close(sqlite3*);
          功能:
            关闭sqlite3数据库  

#include <sqlite3.h>
#include <stdio.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 column, char** pcontent,char** ptitle)
{
    int i = 0;

    for (i = 0; i < column; i++)
    {
        printf("%s = %10s       ", ptitle[i], pcontent[i]);
    }
    printf("\n");

    return 0;
}

int main(void)
{
    sqlite3 *pDb = NULL;
    int ret = 0;
    char cmdbuf[1024] = {0};
    char *perrmsg = NULL;
    stu_t s[3] = {
        {"张三", "男", 19, 80},
        {"李四", "女", 18, 60},
        {"王二", "男", 20, 75},
    };
    int i = 0;

    ret = sqlite3_open("student.db", &pDb);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_open failed! : %s\n", sqlite3_errmsg(pDb));
        return -1;
    }

    sprintf(cmdbuf, "create table if not exists student(id integer primary key asc, name text, sex text, age integer, score double);");
    ret = sqlite3_exec(pDb, cmdbuf, 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(cmdbuf, "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, cmdbuf, NULL, NULL, &perrmsg);
        if (ret != SQLITE_OK)
        {
            fprintf(stderr, "sqlite3_exec failed! : %s\n", perrmsg);
            sqlite3_free(perrmsg);
            sqlite3_close(pDb);
            return -1;
        }
    }

    sprintf(cmdbuf, "select * from student;");
    ret = sqlite3_exec(pDb, cmdbuf, 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;
}

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

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

相关文章

项目启动报错:liquibase.lockservice:? - Waiting for changelog lock....

异常报错&#xff1a; 原因 工作流表部分日志表被锁&#xff0c;可能上次未正常终止程序导致的异常。 处理 登录mysql指定项目对应数据库 SELECT * FROM DATABASECHANGELOGLOCK; UPDATE DATABASECHANGELOGLOCK SET locked0, lockgrantednull, lockedbynull WHERE id1;

通过Qt Creator Plugin开发Qt Creator插件-【金丹篇】

1.前言 由于工作学习需要基于Qt Creator架构开发类似的插件&#xff0c;本人感慨网络上Qt 相关的文档真是少。我直接在官方社区查找Qt Creator Plugin愣是一点资料没有。其实想想也是自定义的三方插件到Qt的IED,主要是个社区的贡献者或官方技术人员自用&#xff0c;他开发布会…

仿OpenAI网页前端制作的ChatGPT,超仿真!!!自定义!!!

仿OpenAI网页前端制作的ChatGPT&#xff0c;超仿真&#xff01;&#xff01;&#xff01;自定义&#xff01;&#xff01;&#xff01; 基于C#和WPF的仿真ChatGPT项目 啊没错我是标题党啊&#xff0c;下面内容AI生成的&#xff0c;主要是介绍我基于C#和WPF制作的仿真ChatGPT项…

【HTTP学习】HTTP协议

HTTP介绍 HTTP请求 这里的get没有请求体&#xff0c;会在网站中直接显示提交的表单。而post提交会将请求参数存放在表单中&#xff0c;需要通过F12进行查看。 HTTP响应 HTTP协议解析

一次不严谨的C++、C、Pascal、Rust等对比

起因 现在ACM用得多的基本上就两种语言&#xff0c;C和Python3&#xff0c;还有部分Java&#xff0c;但是当年ACM必学的Pascal、新近流行的rust也有人用&#xff0c;只不过用户很少。 就以一道codeforce上的算法小题为样本&#xff0c;来对比一样用户数量、执行效率、易写程度…

校园综合服务小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;发布信息管理&#xff0c;订单信息管理&#xff0c;类型管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;发布信息&#xff0…

【PyCharm】从零到一:Python爬虫实战教程,小白、绕过反爬虫机制、实战案例全解析

文章目录 前言一、使用的工具二、安装必要的库三、编写程序1.引入库2.发送GET请求3.绕过反爬虫机制4.解析HTML内容5.输出需要的内容 四、完整源码总结 前言 爬虫&#xff08;Web Crawler&#xff09;是一种自动浏览万维网并从中收集信息的程序。它们常被用于搜索引擎、数据分析…

基于UDP/TCP的 c/s 通信模型

基于UDP c/s通信模型 客户端&#xff08;socket&#xff1b;sendto ...&#xff09; 服务器端 ---把自己的地址公布出去 &#xff08;socket&#xff1b;bind //绑定&#xff1b; recvfrom ...&#xff09; 1.recvfrom函数&#xff1a; ssize_t recvfrom( int sockfd, /…

浮毛难清除、异味难消散?选到不好的宠物空气净化器会有什么危害

近年来&#xff0c;不少人家里都养了宠物&#xff0c;有些是猫、有些是狗&#xff0c;甚至有些是兔子&#xff0c;不少人希望能通过它们抒发心中的郁闷&#xff0c;成为自己的搭子。这些宠物在能带来欢乐的同时也会带来一些小烦恼&#xff0c;比如宠物的浮毛、异味都困扰着我们…

Linux日志管理基本介绍及日志轮替原理

&#x1f600;前言 本篇博文是关于日志管理&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x…

ai智能写作生成器哪个好用?推荐五款!

在内容创作日益重要的今天&#xff0c;ai智能写作生成器成为了众多创作者的得力助手。它们不仅能提高写作效率&#xff0c;还能提升写作内容的质量。然而&#xff0c;市场上的ai智能写作生成器众多&#xff0c;选择一个合适的生成器并非易事。本文将为你推荐5款好用的ai智能写作…

[图解]用例规约之业务规则不是算法

1 00:00:01,530 --> 00:00:03,090 像这种某某算法之类的 2 00:00:03,100 --> 00:00:04,130 它往往是什么 3 00:00:05,590 --> 00:00:07,440 某种实现的一个选择 4 00:00:08,140 --> 00:00:09,550 它很可能不是需求 5 00:00:10,620 --> 00:00:13,240 你要问他…

汉服推广网站

TOC springboot0790汉服推广网站 绪论 1.1研究背景 随着网络不断的普及发展&#xff0c;汉服文化平台网站依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性首页、汉服知识、服装展示、用户相册、…

实训day34(8.22)

一、回顾 高并发集群 饿了么后端的登录模块 1、数据库 1. 主从复制(高可用) 2. 传统的主从复制 3. gtids事务型的主从复制 4. 注意 1. server_id唯一 2. 8.x版本需要get_ssl_pub_key 3. 5.x不需要 4. change master to 5. stop | start slave 5. 非交互 import pymys…

Redis7基础篇(八)

redis集群 是什么 能干吗 集群算法-分片-槽位slot redis集群的槽位slot redis集群的分片 分片和槽位的优势 槽位映射的解决方案 上面的三个方案分别对应了小厂 中厂 大厂 哈希槽取余分区 缺点 一致性哈希算法分区 小总结 哈希槽分区 经典面试题 这里说的redis是ap而不是cp的 …

全球著名地标卫星影像收藏第3辑

世界那么大&#xff0c;一起去看看&#xff01; 我们在《全球著名地标卫星影像收藏第2辑》一文中&#xff0c;为大家分享了10全球著名地标高清卫星影像&#xff0c;现在继续为大家分享10个著名地标。 我们整理的这些地标KML文件可以分享大家&#xff0c;你也可以打开相应的UR…

哪款骑行耳机值得入手?精选五款热门骑行耳机实测分析!

骨传导耳机作为骑行爱好者最受欢迎的数码装备之一&#xff0c;凭借其独特优势在骑行爱好者中广受好评&#xff0c;然而由于骨传导耳机市场上品牌众多&#xff0c;它们的品质良莠不齐&#xff0c;让众多消费者无从下手&#xff0c;特别是那些缺乏专业技术支撑的劣质产品&#xf…

Day97:云上攻防-云原生篇KubernetesK8s安全APIKubelet未授权访问容器执行

知识点&#xff1a; 1、云原生-K8s安全-名词架构&各攻击点 2、云原生-K8s安全-Kubelet未授权访问 3、云原生-K8s安全-API Server未授权访问 K8S集群 Kubernetes是一个开源的&#xff0c;用于编排云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用…

83.游戏改造-窗口化

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;82.游戏改造-修改分辨率 逆向窗口化的思路&#xff1a; 首先使用Ollydbg工具打开 82.游…

《重温JavaScript五子棋小游戏》

目录 全部运行代码&#xff1a;五子棋游戏的基本步骤&#xff1a;代码剖析&#xff1a;1. 初始化游戏界面2. 管理游戏状态3. 玩家交互4. 电脑AI5. 胜负判定6. 游戏控制 本文通过实现一个基本的五子棋游戏&#xff0c;展示了如何使用HTML、CSS和JavaScript来构建一个简单的交互式…