当前位置: 首页 > 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);
}

三、总结

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

相关文章:

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语句 二、数…...

Spring 源码解读专栏:从零到一深度掌握 Spring 框架

前言 Spring 是 Java 世界中无可争议的王者框架&#xff0c;它以其灵活、轻量、强大而著称&#xff0c;成为企业级开发的首选工具。然而&#xff0c;很多开发者在使用 Spring 时&#xff0c;往往只停留在会用的层面&#xff0c;对于其内部实现和设计原理知之甚少。本专栏旨在通…...

帆软-秋招提前批-笔试

单选 1. 有四个同学,每个人得到的桃子数量不同,4个到7个之间。然后,4个人都吃掉了1个或2个桃,结果每个人剩下的桃数量还是各不相同。4个人吃过桃后,说了如下的话。其中,吃了2个桃的人撒谎了,吃了1个桃的人说了实话。 安娜:"我吃过红色的桃。" …...

嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)

第七篇 系统BSP开发 文章目录 第七篇 系统BSP开发1. 嵌入式Linux系统介绍嵌入式Linux系统组成产品形态嵌入式芯片启动流程Linux系统Linux系统框架嵌入式编译环境 2.嵌入式Linux开发准备手册文档开发工具配套硬件工程源码 3.嵌入式Linux开发组成概述编译工具链什么是工具链什么是…...

代码随想录算法训练营day52:图03:101. 孤岛的总面积;102. 沉没孤岛;103. 水流问题

101. 孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单…...

开源大模型本地私有化部署

1、安装ollama ollma下载 https://ollama.com/download/windows linux 安装 curl -fsSL https://ollama.com/install.sh | sh 运行 ollama run gemma:2b ollama run gemma:7b 使用端口11434 2、下载 open-webui 代码 https://github.com/open-webui/open-webui.git 生成目录…...

站长为什么要搭建个人博客网站

搭建个人博客网站是一个值得考虑的选择&#xff0c;它不仅有助于个人成长&#xff0c;还能在多个方面带来积极的影响。以下是几个主要的理由&#xff1a; 一、记录与备忘 方便回顾与查阅&#xff1a;博客网站成为了一个个人知识库&#xff0c;记录下来的内容方便后续查阅和回顾…...

Golang | Leetcode Golang题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; type Twitter struct {Tweets []intUserTweets map[int][]intFollows map[int][]intIsFollowMy map[int]bool }/** Initialize your data structure here. */ func Constructor() Twitter {// 每一次实例化的时候&#xff0c;都重新分配一次…...

Redis如何实现发布/订阅?

引言 Redis是一款高性能的内存数据存储系统&#xff0c;除了常用的键值存储功能外&#xff0c;还提供了发布/订阅&#xff08;Pub/Sub&#xff09;机制。通过发布/订阅机制&#xff0c;Redis可以实现消息的广播或者实时通知功能&#xff0c;是一种非常有用的功能。 本文将详细…...

EmguCV学习笔记 VB.Net 4.4 图像形态学

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…...

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…...

拒绝拖延!Kimi助你一天内速成论文初稿!

撰写学术论文是一项需要周密计划和精确执行的任务。它要求作者对文章的每个部分进行深入思考&#xff0c;以确保论文结构的合理性和论述的清晰度。利用Kimi的功能&#xff0c;我们可以更系统地进行写作&#xff0c;从构思到最终成稿&#xff0c;逐步构建出一篇高质量的学术论文…...

Python画笔案例-005 绘制迷宫

1、绘制迷宫 通过 python 的turtle 库绘制一个迷宫的图案&#xff0c;如下图&#xff1a; 2、实现代码 从图上可以看出&#xff0c;内测最短的竖线开始&#xff0c;每次右转 90 度后&#xff0c;线段都增加 8 个单位&#xff0c;所以我们是用 for 循环&#xff0c;循环 50 次…...

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用性能优化二(代码层面)

学完时间&#xff1a;2024年8月22日 学完排名&#xff1a;第1801名 一、长列表优化概述 列表是应用开发中最常见的一类开发场景&#xff0c;它可以将杂乱的信息整理成有规律、易于理解和操作的形式&#xff0c;便于用户查找和获取所需要的信息。应用程序中常见的列表场景有新…...

【Docker】如何将A机器内的镜像,导入到B机器?

由于网络或者仓库的原因&#xff0c;经常遇到pull拉取镜像失败的情况&#xff01;&#xff01; 那么&#xff0c;如何将A机器内的镜像&#xff0c;通过命令&#xff0c;导入到B机器&#xff1f; 两条重要的命令&#xff1a; 1&#xff0c;在已经成功拉取pull的机器上执行命令…...

动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本

系统流程概览 main函数 对于一个服务器程序来说&#xff0c;因为要为外部的客户端程序提供网络服务&#xff0c;也就是进行数据的读写&#xff0c;这就必然需要一个 socket 文件描述符&#xff0c;只有拥有了文件描述符 C/S 两端才能通过 socket 套接字进行网络通信&#xff0…...

爬虫案例4——爬取房天下数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从房天下网中爬取小区名称、地址、价格和联系电话 目标网页地址&#xff1a;https://newhouse.fang.com/house/s/ 一、思路和过程 目标网页具体内容如下&#xff1a; ​​​​ …...

网络硬盘录像机NVR程序源码NVR全套运用方案

在当今社会&#xff0c;随着科技的飞速发展和人们对安全需求的日益增长&#xff0c;安防监控系统已成为保障公共安全、维护社会稳定的重要手段。其中&#xff0c;网络视频录像机&#xff08;NVR&#xff09;作为安防监控系统的核心设备&#xff0c;其智能化升级运用方案对于提高…...

03:电容的充放电特性及应用举例

1.电容的基本特性&#xff1a;电容两端的电压不能突变 2.影响电容两端电压的参数&#xff1a;整个回路中电阻&#xff0c;电容大小 3.如何计算电容的电压变化时间&#xff1f; τRC R1k C1uF 则得到τ1ms的时间 应用&#xff1a;芯片使能延时...

【专题】2023-2024中国游戏企业研发竞争力报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37447 在当今的数字时代&#xff0c;游戏产业已然成为经济与文化领域中一股不可忽视的重要力量。2023 年&#xff0c;中国自研游戏市场更是呈现出一片繁荣且复杂的景象&#xff0c;实际销售收入达到了令人瞩目的 2563.8 亿元&#x…...

AR.js实战指南:如何在Web浏览器中构建高效增强现实应用

AR.js实战指南&#xff1a;如何在Web浏览器中构建高效增强现实应用 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js 在移动设备普及的今天&#xff0c;增强现实&…...

SIM800L新手避坑指南:从电源不稳到中文短信发送,我的踩坑实录

SIM800L实战避坑手册&#xff1a;从电源设计到中文短信的完整解决方案 第一次拿到SIM800L模块时&#xff0c;我天真地以为这不过是个"高级版蓝牙模块"。直到电源指示灯开始疯狂闪烁、串口不断吐出乱码、中文短信变成问号时&#xff0c;我才意识到自己掉进了技术深坑。…...

Ling-1T万亿参数模型:高效推理新体验

Ling-1T万亿参数模型&#xff1a;高效推理新体验 【免费下载链接】Ling-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-1T-FP8 导语&#xff1a;近日&#xff0c;inclusionAI团队正式发布了Ling系列2.0版本的旗舰模型——Ling-1T-FP8&#xff…...

为什么流水线ADC能用Dither,而SAR ADC效果差?深入解析两种架构下的Dither技术差异与改进方案

流水线ADC与SAR ADC中Dither技术的差异化设计与工程实践 在高速高精度数据采集系统中&#xff0c;量化噪声的非线性特性始终是困扰设计者的核心难题。当我们用频谱分析仪观察一个理想正弦波经过ADC转换后的输出时&#xff0c;那些突兀的谐波分量往往源自量化过程的非线性失真。…...

为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点

第一章&#xff1a;Python WASM部署的现状与认知误区WebAssembly&#xff08;WASM&#xff09;正迅速成为浏览器端高性能计算的新基石&#xff0c;但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”&#xff0c;实则 Pytho…...

告别Redis?在CentOS 7上快速体验国产TongRDS 2.2.x(附与SpringBoot整合对比)

国产内存数据库TongRDS技术评估与SpringBoot整合实战 在技术架构选型的关键时刻&#xff0c;国产基础软件的成熟度与性能表现成为越来越多企业关注的焦点。作为Redis的潜在替代方案&#xff0c;TongRDS凭借其纯Java架构和与Redis协议的高度兼容性&#xff0c;正在技术社区引发热…...

OpenClaw极简部署:nanobot镜像+手机Termux方案

OpenClaw极简部署&#xff1a;nanobot镜像手机Termux方案 1. 为什么要在手机上部署OpenClaw&#xff1f; 去年夏天&#xff0c;我在咖啡馆等朋友时突发奇想&#xff1a;如果能用手机随时调用AI助手处理文件该多好。当时尝试了几款云端AI工具&#xff0c;但要么功能受限&#…...

学习如何聚合零样本大型语言模型代理以进行企业披露分类

摘要本文研究一个轻量级训练聚合器是否能够将多样化的零样本大语言模型判断整合为更强的下游信号&#xff0c;用于公司披露分类。零样本大语言模型无需针对特定任务进行微调即可阅读披露文本&#xff0c;但其预测结果常因提示词、推理方式和模型家族的不同而存在差异。我采用一…...

Quartus中生成与烧录FPGA板载Flash的jic文件全流程解析

1. 为什么需要jic文件&#xff1f; 刚接触FPGA开发的朋友可能会疑惑&#xff1a;为什么编译生成的sof文件不能直接烧录到Flash&#xff1f;这个问题要从FPGA的特性说起。FPGA芯片内部是基于SRAM结构的&#xff0c;这意味着每次断电后配置数据都会丢失。想象一下你正在用电脑写文…...

Xcode打包上传App Store Connect失败?可能是这些配置没做好(含解决方案)

Xcode打包上传App Store Connect失败排查指南&#xff1a;从配置到解决方案 每次提交应用上架都是iOS开发者必经的考验&#xff0c;而Xcode打包上传过程中遇到的"无效二进制文件"错误堪称拦路虎。这种错误往往不会给出明确提示&#xff0c;而是通过邮件通知或在App S…...