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

news2024/12/24 10:32:51

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; //如果打开成功,将指向数据库的指针赋值给p
    if(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.coloradmin.cn/o/1581489.html

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

相关文章

【数据结构与算法】递推法和递归法解题(递归递推算法典型例题)

目录 【算法】递推法和递归法递推算法递推算法的特点 递归算法递归算法的特点 递归法与递推法的算法设计例题例题一&#xff1a;斐波那契数列&#xff08;递归递推两种方法 以及 改进算法&#xff09;例题二&#xff1a;数字三角形问题例题三&#xff1a;扑克牌42点问题 更多算…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

Jpegli 简介:Google 开源的新一代 JPEG 编码库

互联网改变了我们的生活、工作和交流方式。然而&#xff0c;当页面加载缓慢时&#xff0c;它可能会变成令人沮丧的根源。这个问题的核心在于图像的编码。 为了改进这一点&#xff0c;Google 推出了 Jpegli&#xff0c;这是一种先进的 JPEG 编码库&#xff0c;它保持了高度的向…

OpenAI曾转录100万小时视频数据,训练GPT-4

4月7日&#xff0c;纽约时报在官网发布了一篇名为《科技巨头如何挖空心思&#xff0c;为AI收集数据》的技术文章。 纽约时报表示&#xff0c;OpenAI曾在2021年几乎消耗尽了互联网有用的文本数据源。为了缓解训练数据短缺的难题&#xff0c;便开发了知名开源语音识别模型Whispe…

系统架构最佳实践 -- 智慧图书管理系统架构设计

随着数字化时代的到来&#xff0c;智慧图书管理系统在图书馆和机构中扮演着重要的角色。一个优秀的图书管理系统不仅需要满足基本的借阅管理需求&#xff0c;还需要具备高效的性能、良好的扩展性和稳定的安全性。本文将讨论智慧图书管理系统的架构设计与实现&#xff0c;以满足…

spring Cache的基本使用

一、spring Cache基本介绍&#xff08;其实是通过代理对象来进行操作的&#xff09; Spring Cache 是 Spring 框架提供的一个缓存抽象&#xff0c;它能够轻松地集成到 Spring 应用程序中&#xff0c;为方法调用的结果提供缓存支持&#xff0c;从而提高应用程序的性能和响应速度…

基于拉格朗日分布算法的电动汽车充放电调度MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序简介 该模型主要做的是基于拉格朗日分布算法的电动汽车充放电调度模型。利用蒙特卡洛模拟法模拟出电动汽车负荷曲线&#xff0c;并求解出无序充电功率曲线和有序充电曲线&#xff0c;该模型在电动汽车个…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

C++设计模式:原型模式(八)

1、定义与动机 定义&#xff1a;使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 动机&#xff1a; 在软件系统中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变…

登录压力测试

目录 一、准备测试数据 1.1数据库存储过程添加数据 1.2导出为csv作为测试数据&#xff08;账号、密码&#xff09; 二、使用fiddler抓包查看接口 2.1.抓到相关接口信息 2.2添加线程组和http请求 2.3将前面接口需要的参数去json格式化 ​2.4填写相关信息 ​ 2.5添加http…

顺序表(C语言实现)

什么是顺序表 顺序表和数组的区别 顺序表本质就是数组 结构体初阶进阶 系统化的学习-CSDN博客 简单解释一下&#xff0c;就像大家去吃饭&#xff0c;然后左边是苍蝇馆子&#xff0c;右边是修饰过的苍蝇馆子&#xff0c;但是那个好看的苍蝇馆子一看&#xff0c;这不行啊&a…

Web前端-Ajax

Ajax 概念:Asynchronous JavaScript And XML,异步的JavaScript和XML。 作用: 1.数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等…

「44」直播间换脸,揭开神秘的面纱……

「44」换脸神器 让你瞬间秒变「明星脸」带货 DeepFace是Facebook的人脸识别系统之一&#xff0c;旨在在照片和视频中准确识别和标识人脸。它使用深度学习和神经网络技术来进行高度精确的人脸匹配和验证。 DeepFace利用了大量的训练数据和先进的人脸识别算法&#xff0c;能够…

Redis中的集群(二)

节点 集群数据结构 redisClient结构和clusterLink结构的相同和不同之处 redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区&#xff0c;这两个结构的区别在于&#xff0c;redisClient结构中的套接字和缓冲区是用于连接客户端的&#xff0c;而clust…

使用Vivado Design Suite进行功率优化

功率优化是一个可选步骤&#xff0c;它通过使用时钟门控来优化动态功率。它既可以在Project模式下使用&#xff0c;也可以在Non-Project模式下使用&#xff0c;并且可以在逻辑优化之后或布局之后运行&#xff0c;以减少设计中的功率需求。功率优化包括Xilinx的智能时钟门控解决…

git分支-分支工作流

分支工作流 现在已经掌握了分支和合并的基础知识&#xff0c;可以或应该如何使用它们&#xff1f;在本节中&#xff0c;我们将介绍一些常见的工作流程&#xff0c;这种轻量级的分支使得这些工作流程成为可能&#xff0c;因此我们可以决定是否要将它们纳入到自己的开发周期中。…

每天五分钟深度学习:如何理解逻辑回归算法的假设函数?

本文重点 我们在机器学习专栏中已经学习了逻辑回归算法,本次课程我们将重温逻辑回归算法,该算法适用于二分类的问题,本文主要介绍逻辑回归的假设函数。我们在学习线性回归算法的时候,我们已经知道了线性回归算法的假设hθ(x)=θTX(参数θ的转置*X),但是对于逻辑回归而言…

使用wget下载Github代码文件

前言 使用wget无法直接从Github链接直接下载代码文件&#xff0c;下文介绍解决方案。 解决方案 确保要下载的代码文件是公开文件&#xff0c;否则无法通过wget下载。 进入Github并找到要下载的代码文件&#xff0c;例如&#xff1a; 进入文件后&#xff0c;点击文件右侧的…

Windows完全卸载MySQL后再下载安装(附安装包)

目录 友情提醒第一章&#xff1a;如何完全卸载干净mysql教程&#xff08;三个步骤完全卸载&#xff09;1&#xff09;步骤一&#xff1a;卸载程序2&#xff09;步骤二&#xff1a;删除文件3&#xff09;步骤三&#xff1a;删除注册表信息 第二章&#xff1a;下载软件两种方式1&…

R语言数据可视化:ggplot2绘图系统

ggpolt2绘图系统被称为R语言中最高大上的绘图系统&#xff0c;使用ggplot2绘图系统绘图就像是在使用语法创造句子一样&#xff0c;把数据映射到几何客体的美学属性上。因此使用ggplot2绘图系统的核心函数ggplot来绘图必须具备三个条件&#xff0c;数据data&#xff0c;美学属性…