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

Linux软件编程---数据库

 

目录

 

一、数据库

1.1.概念

1.2.类型 

1.关系型数据库

2.非关系型数据库

1.3.SQL语言

1.4.如何在Linux安装sqlite数据库 

1.确保虚拟机可以上网

2.配置apt-get工具集合

3.安装sqlite数据库

1.5.sqlite3

1.创建数据库

2.查看数据表

3.退出数据库

4.SQL语句

二、数据库编程

2.1.安装sqlite3

 2.2.函数接口

1.sqlite3_open() --- 打开数据库

2. sqlite3_errmsg() --- 获得出错原因

3.sqlite3_exec ()--- 操作数据库表

4.sqlite3_close()--- 关闭数据库

2.3.实例

三、总结


一、数据库

1.1.概念

文件存放数据,掉电的情况下数据不会;

数据库存放的位置也是文件;

什么时候使用数据库呢?

当要存储和管理大量数据时,往往使用数据库,效率高;

1.2.类型 

1.关系型数据库

 1)Oracle

 2)DB2

3)MySql

4)sqlserver

5)sqlite

2.非关系型数据库

1)redis

1.3.SQL语言

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

1.4.如何在Linux安装sqlite数据库 

1.确保虚拟机可以上网

2.配置apt-get工具集合

3.安装sqlite数据库

suo apt-get install sqlite3

1.5.sqlite3

1.创建数据库

sqlite3  数据库名

2.查看数据表

.tables 

3.退出数据库

.quit

4.SQL语句

create table 表名   --------  创建数据库表insert into 表名 values (.....)------ 插入元素update 表名 set 列 = “”     ---- 修改元素select 列,., . from 表名   ----- 查询元素delete from student where ..  ------- 删除某一行元素drop table 表名 ----  删除表

注意查询是最复杂的  可以连接where条件查询,也可以联合其他表查询

联合查询

cross join ---  交叉连接inner join --- 内连接outer join --- 外连接

二、数据库编程

2.1.安装sqlite3

 sudo apt-get install libsqlite3-dev 
 

 2.2.函数接口

1.sqlite3_open() --- 打开数据库

        int sqlite3_open(const char *filename,   /* Database filename (UTF-8) */sqlite3 **ppDb          /* OUT: SQLite db handle */);功能:打开一个数据库文件参数:filename:数据库文件名称 ppDb:数据库句柄返回值:成功返回SQLITE_OK失败返回错误码

2. sqlite3_errmsg() --- 获得出错原因

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

3.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 失败返回错误码 

4.sqlite3_close()--- 关闭数据库

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

2.3.实例

创建数据库,并创建student表,插入数据,并查询打印

#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{char name[32];char sex[8];double score;
} stu_t;/*打印查寻到的数据*/
int callback(void *arg, int column, char **pcontext, char **ptitle)
{int i = 0;for (i = 0; i < column; i++){printf("%s = %s\t", ptitle[i], pcontext[i]);}printf("\n");return 0;
}int main(void)
{sqlite3 *db = NULL;char *perrmsg = NULL;char tmpbuff[1024] = {0};int ret = 0;int i = 0;stu_t s[3] = {{"张三","男",89},{"李四","男",99},{"王二","男",100},};/* 打开数据库文件 */ret = sqlite3_open("student.db", &db);if (ret != SQLITE_OK){fprintf(stderr, "fail to open:%s\n", sqlite3_errmsg(db));  return -1;}/* 创建表 */sprintf(tmpbuff, "%s", "create table if not exists student  (id integer primary key asc,name text,sex text,socre integer);");ret = sqlite3_exec(db, tmpbuff, NULL, NULL, &perrmsg);if (ret != SQLITE_OK){fprintf(stderr, "fail to create table:%s", perrmsg);  return -1;}/* 插入数据 */for (i = 0; i < 3; i++){sprintf(tmpbuff, "insert into student values(NULL,\'%s\',\'%s\',%lf);",s[i].name,s[i].sex,s[i].score);ret = sqlite3_exec(db, tmpbuff, NULL, NULL, &perrmsg);if (ret != SQLITE_OK){fprintf(stderr, "fail to create table:%s", perrmsg);  sqlite3_free(perrmsg);sqlite3_close(db);return -1;}}/* 查寻数据 */sprintf(tmpbuff, "select * from student;");ret = sqlite3_exec(db, tmpbuff, callback, NULL, &perrmsg);if (ret != SQLITE_OK){fprintf(stderr, "fail to create table:%s", perrmsg); sqlite3_free(perrmsg);sqlite3_close(db); return -1;}    sqlite3_close(db);
}

三、总结

        数据库中最难的操作还是,查询操作,查询按照很多不同条件查询,情况比较多,必须扎实掌握。 

http://www.lryc.cn/news/430352.html

相关文章:

  • Spring 源码解读专栏:从零到一深度掌握 Spring 框架
  • 帆软-秋招提前批-笔试
  • 嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)
  • 代码随想录算法训练营day52:图03:101. 孤岛的总面积;102. 沉没孤岛;103. 水流问题
  • 开源大模型本地私有化部署
  • 站长为什么要搭建个人博客网站
  • Golang | Leetcode Golang题解之第355题设计推特
  • Redis如何实现发布/订阅?
  • EmguCV学习笔记 VB.Net 4.4 图像形态学
  • HarmonyOS 开发
  • 拒绝拖延!Kimi助你一天内速成论文初稿!
  • Python画笔案例-005 绘制迷宫
  • 【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用性能优化二(代码层面)
  • 【Docker】如何将A机器内的镜像,导入到B机器?
  • 动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本
  • 爬虫案例4——爬取房天下数据
  • 网络硬盘录像机NVR程序源码NVR全套运用方案
  • 03:电容的充放电特性及应用举例
  • 【专题】2023-2024中国游戏企业研发竞争力报告合集PDF分享(附原数据表)
  • 会话跟踪方案:Cookie Session Token
  • jemeter压力测试入门
  • SpringBoot3 简单集成 Spring AI 并使用
  • 【C/C++】程序设计基础知识(数据类型与表达式、控制语句、数组与结构)
  • python库——sklearn的关键组件和参数设置
  • CAS-ViT实战:使用CAS-ViT实现图像分类任务(一)
  • 处理数组下标的代码
  • 数学建模算法总结
  • 代码随想录算法训练营第五十五天 | 并查集理论基础、107. 寻找存在的路径
  • ROS_package 、CMakeLists.txt、package.xml、ROS_node之间的关系
  • 嵌入式学习----网络通信之TCP协议通信