SQLite数据库在Linux系统上的使用

SQLite是一个轻量级的数据库解决方案,它是一个嵌入式的数据库管理系统。SQLite的特点是无需独立的服务器进程,可以直接嵌入到使用它的应用程序中。由于其配置简单、支持跨平台、服务器零管理,以及不需要复杂的设置和操作,SQLite非常适用于移动应用、小型项目和桌面应用程序。

1.安装数据库

可以在官网(http://www.sqlite.org/)下载安装包(我的安装包有点老就不给大家了)
libsqlite3-0_3.7.2-1ubuntu0.1_i386.deb (.deb的安装包可以用dpkg -i 来进行安装)
.deb 是linux 系统的应用程序的安装包文件
安装.deb文件: dpkg -i deb文件名 (dpkg -i :安装应用程序)

1.1 打开数据库

打开/新建数据库命令: sqlite3 my.db
(如果my.db 存在就打开,不存在就新建),创建成功后,当前目录会有一个my.db的文件
数据库 一般 扩展名是.db(database)
dd1d5acd8e8d45a4b40e9e2010af30c2.png
sqlite3:分两种语言:
sqlite3应用程序的选项语言,一般以.开头
输入 .开头的命令(非sql语句命令)
.help:查看帮助
.tables :查看数据库有哪些表
.quit :退出sqlite
还有一种命令不是以 .开头的,这种叫sql语句,sql语句以 ; 结束
总结:
sqlite3 以 . 开头的命令是 sqlite3命令
不是以 . 开头的是 sql语句,一定以 ;结束

1.2数据库中的概念

数据库
将所有的数据,各种类型,描述各种事物的数据放到一起, 如:my.db文件,就是一个数据库文件
数据表
描述某一个事物的基本信息的表
学生信息表 (stu_info)   编号 姓名 性别 年龄 班级 爱好
图书信息表 (book_info)   图书编号 书名 出版社 作者 分类
记录
表里面的一条信息
字段
列名
e181899118be420ebd45a1de6b43d8ba.png

2.sql语句(重点)

sql语句: 是一个标准的数据库语言,提供了对数据库操作的各种命令, 并且sql语句是所有数据库通用的。

2.1创建数据表

语句:create table stu_info (number varchar(20), name varchar(50), age integer, sex varchar(10));     //后面会用到这个表,大家了解一下
create table :关键字, 用来创建表
stu_info :自定义的表名
number name age sex :字段
varchar :可变字符串(数据类型) (默认50)
integer :整数数据类型

2.2 删除表

drop table +表名;     //执行前记得加分号

示例:drop table stu_info;  //删除stu_info表

2.3 插入记录到表中(重点)

1)字段全部添加的语句:insert into 表名 values(填入所有字段);   //注意结尾有分号

insert into stu_info values ('1001', 'zhangsan', 25, 'nan'); //所有字段全都填入值
2)只给某些字段添加值的语句:insert into stu_info (age,number) values (26, '1002');   //age,number是不添加值的字段。

2.4查询表中的记录(重点)

select * from stu_info; //   * 是查看stu_info表里的所有字段
select age from stu_info; //查看age字段
select age,number from stu_info; //查看多个字段间用逗号隔开
sql命令:
.header on :显示字段名
.mode column :列对齐

按一个条件查询

select * from stu_info where name = 'lisi';  //查询表里name='lisi'的记录

按多个条件查询

select * from stu_info where name = 'lisi' and age = 25;   
select * from stu_info where name = 'lisi' or age = 25;

其他各种查询

1 查询年龄 > 25的记录
select * from stu_info where age > 25;
2 查询记录 只想看编号、姓名字段
select number, age from stu_info where age = 25;    //查询age=25的记录,只看number,age字段
3 按顺序输出所有记录
select * from stu_info order by age; //按年龄顺序输出,默认情况是升序排列
select * from stu_info order by age desc; //降序排列
4 模糊查询(假设有一个人名我记不住了,但能记住名字中的一个字, 就可以用模糊查询)
示例:查询名字当中带li字符的人(like)
select * from stu_info where name like '%li%';  // % 代替后续或者前面的内容
5 多条件查询
select * from stu_info where age > 25 and number > 1001; //(查询年龄大于 25, 编号 > 1001 的学生信息)
6 统计记录条数
select count(*) from stu_info;
select count(*) from stu_info where age = 25;
练习:
1. 创建学生成绩表(字段如下)
学生编号(number) 数学(math) 语文(ch) 英语(en)
2. 向学生成绩中添加三条记录
1001 100 90 80
1002 80 90 80
1003 90 90 80
3. 查询出编号1003的记录
create table score_info (number varchar(20), math integer, ch integer, en
integer);insert into score_info values ('1001', 100, 90, 80); //所有字段全都填入值
insert into score_info values ('1002', 80, 90, 80); //所有字段全都填入值
insert into score_info values ('1003', 90, 90, 80); //所有字段全都填入值select * from score_info where number = '1003';

2.5 删除表中记录(重点)

示例: delete from stu_info; //删除所有记录
delete from stu_info where number = '1002'; //删除number = '1002的记录

2.6修改表中记录(重点)

示例:把字段number为1004 的记录,该记录中name改成wangwu

update stu_info set name = 'wangwu' where number = '1004';

2.7多表联合查询

学生基本信息表:
number name age sex
成绩表:
nubmer math ch en
两个表number字段相同
示例:查询数学成绩 > 90的所有学生的基本信息和成绩
select stu_info.*, score_info.math from stu_info, score_info where score_info.math > 90 and stu_info.number = score_info.number;     //显示的字段有score_info1的math字段,还有stu_info整个表的字段   (必须有一个字段是相同的)

3.c语言操作数据库

3.1 打开数据库

头文件:#include <sqlite3.h>
函数: int sqlite3_open(char *path, sqlite3 **db);
功能: 打开数据库,如果数据不存在,则新建
参数:
path [入参] :打开的数据库名称(路径)
db [出参] :打开数据库后,它将指向数据库的指针给db
返回值:
执行成功返回SQLITE_OK(0),否则返回其他值
例如:
sqlite3* db;//FILE* fp
sqlite3_open("my.db", &db);
#include <stdio.h>
#include <sqlite3.h>
int main()
{sqlite3 *p; //如果打开成功,将指向数据库的指针赋值给pif(sqlite3_open("my.db", &p) == 0) //如果数据库不存在,就创建{printf("database open success\n");sqlite3_close(p);}
}

编译:gcc test.c -lsqlite3

3.2 执行数据库操作的sql语句

(只用于insert into, create table, update, delete)

int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback,
void *, char **errmsg);
参数 
db , sqlite3_open 的第二个参数
sql, 要执行的sql语句
NULL 默认为NULL (非NULL值用在查询中)
NULL 默认为NULL
errmsg: [出参] 如果sql语句执行错误,errmsg中保存错误字符串
返回值:成功返回0,不成功返回其他
#include <stdio.h>
#include <sqlite3.h>
int main()
{sqlite3 *p;if(sqlite3_open("my.db", &p) == 0) //如果数据库不存在,就创建{printf("database open success\n");if(sqlite3_exec(p, "delete from stu_info where name = 'zhangsan'", NULL,NULL, NULL) == 0){printf("delete success\n");}}
}

3.3查询语句

函数: int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);
功能:执行SQL查询操作。
参数:
db:指向数据库指针(数据库句柄), open的第二个参数
sql:SQL语句, (select * from stu_info)
resultp[出参]:用来指向sql执行结果的指针 (跟errmsg类似)
nrow[出参]:满足条件的记录的数目, 包括字段名,相当于行数(表头会返回出来,但表头不计入行 数,所以打印时需要打印nrow+1行)
ncolumn[出参]:每条记录包含的字段数目,相当于列数

errmsg:错误信息指针的地址, 如果语句执行出错,那么errmsg中是错误信息 返回值:成功返回0,失败返回错误码

示例:

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int main()
{sqlite3 *db;char *errmsg;char **q;int nrow, ncolumn, i, j, index = 0;if(sqlite3_open("my.db", &db) == 0){if(sqlite3_get_table(db, "select * from stu_info", &q, &nrow,&ncolumn, &errmsg) != 0){printf("error : %s\n", errmsg);exit(-1);}else{for (i=0; i < nrow + 1; i++) //nrow 是行, 如果有1条记录,那么值为1{for (j=0; j<ncolumn; j++){printf("%10s", q[index++]); //printf("%10s",q[i*ncolumn + j]);}printf("\n");}}}
}

4.结语

这就是sqlite数据库在Linux上使用教程,感谢大家的观看,希望大家点点赞,点点关注,后续会出用到sqlite的项目,谢谢!

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

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

相关文章

共享低碳未来!科士达新一代工商业储能产品引爆ESIE 2024

4月11日&#xff0c;第十二届储能国际峰会暨展览会&#xff08;ESIE 2024&#xff09;在北京首钢会展中心盛大开幕&#xff0c;科士达以“数智光储&#xff0c;共享低碳未来”为主题&#xff0c;携多款工商业储能产品及解决方案惊艳亮相本次盛会。 展会首日&#xff0c;科士达展…

C/C++基础----运算符

算数运算符 运算符 描述 例子 两个数字相加 两个变量a b得到两个变量之和 - 两个数字相减 - * 两个数字相乘 - / 两个数字相除 - % 两个数字相除后取余数 8 % 3 2 -- 一个数字递减 变量a&#xff1a;a-- 、--a 一个数字递增 变量a: a 、 a 其中递…

VSCode中调试C++程序

目录 一、准备工作&#xff1a;安装插件 1、C/C插件 ​编辑 2、CMake插件 3、CMake tool插件 二、调试过程 1、debug 2、打断点 3、调C/C文件 每次重新调试的时候都忘了具体步骤&#xff0c;直接给自己写个备忘录好了。 一、准备工作&#xff1a;安装插件 1、C/C插件…

zabbix“专家坐诊”第236期问答

问题一 Q&#xff1a;我的trap里已经可以收到信息了&#xff0c;后续要怎么创建监控项呀&#xff1f; A&#xff1a;参考&#xff1a; 问题二 Q&#xff1a;snmp和snmp trap咋搞&#xff1f; A&#xff1a;你指的是如何开启这些协议还是如何做监控项&#xff1f; Q&#xff1…

Opentelemetry——Observability Primer

Observability Primer 可观测性入门 Core observability concepts. 可观测性核心概念。 What is Observability? 什么是可观测性&#xff1f; Observability lets us understand a system from the outside, by letting us ask questions about that system without know…

Java——数组练习

目录 一.数组转字符串 二.数组拷贝 三.求数组中元素的平均值 四.查找数组中指定元素(顺序查找) 五.查找数组中指定元素(二分查找) 六.数组排序(冒泡排序) 七.数组逆序 一.数组转字符串 代码示例&#xff1a; import java.util.Arrays int[] arr {1,2,3,4,5,6}; String…

数据分析——数据规范化

数据规范化是数据分析中的一个重要步骤&#xff0c;其目的在于确保数据的一致性和可比性&#xff0c;提高数据质量和分析结果的准确性。以下是一些数据规范化的常见方法和技术&#xff1a; 数据清洗&#xff1a;此步骤主要清除数据中的重复项、空格、格式错误等&#xff0c;确…

批归一化(BN)在神经网络中的作用与原理

文章目录 1. 批归一化&#xff08;BN&#xff09;在神经网络中的作用与原理1.1 作用与优势1.2 原理与推导 2. 将BN应用于神经网络的方法2.1 训练时的BN 2. 将BN应用于神经网络的方法2.1 训练时的BN2.2 测试时的BN代码示例&#xff08;Python&#xff09;&#xff1a; 3. BN的优…

编程规范(保姆级教程)

文章目录 为什么需要编程规范&#xff1f;&#x1f4a1;代码检测工具 ESLint&#x1f4a1;代码格式化 Prettier&#x1f4a1;ESLint 与 Prettier 配合解决代码格式问题eslint支持ts约定式提交规范Commitizen助你规范化提交代码什么是 Git Hooks使用 husky commitlint 检查提交…

探索设计模式的魅力:MVVM模式在AI大模型领域的创新应用-打破传统,迎接智能未来

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 MVVM模式在AI大模型领域的创新应用-打破传统迎接智能未来 &#x1f680; “在人工智能的领域里&a…

【Entity Framework】如何使用EF中的生成值

【Entity Framework】如何使用EF中的生成值 文章目录 【Entity Framework】如何使用EF中的生成值一、概述二、默认值三、计算列四、设置主键五、显示配置值生成六、设置日期/时间值生成6.1 创建时间戳6.2 更新时间戳 七、替代值生成八、无值生成九、总结 一、概述 数据库列的值…

DHCP抓包分析

DHCP动态路由配置协议&#xff0c;是C/S架构&#xff0c;由DHCP服务器为客户端动态分配IP信息。 DHCP客户端首次接入网络数据交互过程&#xff1a; 如何解决IP地址的冲突&#xff1a; ▫ DHCP服务器端&#xff1a;收到DHCP DISCOVER报文时&#xff0c;给客户端分配IP地址前会发…

【C++第三阶段】stackqueue容器

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 stack容器queue容器 stack容器 是什么&#xff1f;功能是什么&#xff1f;常用接口是什么&#xff1f;局限性有哪些&#xff1f;优势又有哪些&#xff1f; 栈容器&#xff0c;先进…

error-ckeditor-duplicated-modules 在vue中引入ckeditor插件报错

报错原因&#xff1a; 由于集成了webpack&#xff0c;统一引入了ckeditor &#xff0c;但是页面里面我们又通过import引入了一遍&#xff0c;所以导致引入重复了 解决&#xff1a; ckeditor本身除了基本的一些功能&#xff0c;其他基本全靠插件引入&#xff0c;所以想加功能必…

谷歌推出Vids:AI驱动的PowerPoint,重新定义演示文稿的未来|TodayAI

不管你喜不喜欢&#xff0c;找到集成了AI技术以简化常见任务的工具和服务变得越来越容易。谷歌的应用套件迅速成为了一个集成了Gemini AI的产品中心&#xff0c;这些产品可以在工作场所到你的家中的任何地方使用。例如&#xff0c;如果在工作中做演示一直是你的痛点&#xff0c…

git操作码云(gitee)创建仓库到上传到远程仓库

想必有的小伙伴在为上传到码云远程仓库而感到烦恼吧&#xff01;本篇为大家详细讲解实现过程&#xff0c;跟着我的步伐一步一步来。 我就当大家已经注册好了码云 一、在码云上需要的操作 接下来我们需要使用到 git 了 二、git 上的操作 到了咋们的git了&#xff0c;开整 首…

外包干了3天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Terraform 状态不同步处理

背景 在使用 Terraform 创建 TencentCloud TKE 的时候&#xff0c;手贱把 node pool 删掉了。导致执行 destroy, plan 都会报错。 │ Error: [TencentCloudSDKError] CodeInternalError.UnexpectedInternal, Messagerelated node pool query err(get node pool failed: [E501…

Python如何安装第三方模块

cmd窗口中使用pip install命令安装 1、键盘按下win R&#xff0c;然后在输入框中输入cmd&#xff0c;回车&#xff0c;就打开了cmd窗口。 下图的运行框会出现到屏幕左下角。 2、输入下面的命令&#xff0c;回车即可。 pip install xxx # xxx为要安装的模块名 如图所示&…

【13137】基于TQM的人力资源管理

目录 1.单选题 2.多选题 3.名词解释题 4.简答题 1.单选题