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

三、总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VSCode打开HBuilderX创建的uniapp项目
  • Vue.js与UI构建
  • Autojs详解
  • 解决macOS下Homebrew下载慢的问题
  • [JS]经典面试题-基础篇
  • 泛微基于华为仓颉编程语言开发公文交换系统 推动办公软件全面国产化
  • 代码随想录算法训练营第二十三天(回溯 二)
  • 目标检测(Object Detection)
  • 深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)
  • Qt生成.exe文件
  • Windows上传Linux文件行尾符转换
  • 使用kubekey快速搭建k8s集群
  • fastadmin 安装
  • 信息学奥赛一本通编程启蒙题解(3031~3035)
  • Python正则表达式提取车牌号
  • 网络传输文件的问题
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Apache的80端口被占用以及访问时报错403
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES6系列(二)变量的解构赋值
  • Fabric架构演变之路
  • github从入门到放弃(1)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA 学习IO流
  • JavaScript设计模式系列一:工厂模式
  • js如何打印object对象
  • node.js
  • Redis的resp协议
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vue自定义指令实现v-tap插件
  • 从零开始在ubuntu上搭建node开发环境
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于webpack 的 vue 多页架构
  • 深入浅出Node.js
  • 实战|智能家居行业移动应用性能分析
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 物联网链路协议
  • 线性表及其算法(java实现)
  • 学习HTTP相关知识笔记
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​插件化DPI在商用WIFI中的价值
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)逆序输出字符串
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (规划)24届春招和25届暑假实习路线准备规划
  • (回溯) LeetCode 46. 全排列
  • (转)关于多人操作数据的处理策略
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .net core 3.0 linux,.NET Core 3.0 的新增功能