当前位置: 首页 > news >正文

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

数据库:
    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.mrgr.cn/news/6354.html

相关文章:

  • 【在Linux世界中追寻伟大的One Piece】IO基础
  • 如何对 GitLab 中文版进行升级?
  • 大语言模型私有化部署和个性化调优的技术实践
  • 以FLV解复用为例详解开源库FFmpeg中解复用器的源码逻辑及处理流程
  • Springboot+vue实现webScoket
  • 远端登录基础配置实验
  • 【计算机网络】认识端口号 认识传输层协议 认识网络字节序 认识socket套接字
  • linux Qt QkeyEvent及驱动键盘按键捕获
  • SolidityFoundry Merkle Airdrop
  • Gene_processing_system-v2.0使用之环境变量配置
  • 鉴权Cookies、授权session、token
  • 2024 Python3.10 系统入门+进阶(七):字符串及其常用操作详解上篇
  • “CSS”第一步——WEB开发系列13
  • Python入门教程(超详细)
  • Unity URP Shader 修改深度让人物不再被地面遮挡
  • 基于python的坦克游戏的设计与实现
  • 适应CLIP作为图像去雾的聚合指导
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频
  • 机器学习辅助复合材料预测,性能管理优化创新材料,这种王炸般的组合,还真是大开眼界!
  • Android Forensics with Belkasoft