Sqlite3数据库基本使用

一、基本概念

数据:能够输入计算机并能被计算机程序识别和处理的信息集合
数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合
DBMS:位于用户与操作系统之间的一层数据管理软件,用于操纵和管理数据库

二、安装

在线安装:
sudo apt-get install sqlite3 安装数据库软件
sudo apt-get install libsqlite 安装数据库的函数库
离线安装
sudo dpkg -i sqlite3_3.22.0-1ubuntu0.4_amd64.deb 离线安装数据库软件
sudo dpkg -i libsqlite3-dev_3.22.0-1ubuntu0.4_amd64.deb 离线安装数据库的函数库

  • 注:离线安装包可以从官网获取 https://www.sqlite.org/

验证是否安装好
输入sqlite3,进入下面的界面说明安好了
在这里插入图片描述

三、使用

(一)系统命令

不同的数据库的系统命令不一样,取决于数据库的开发者

.help      查看帮助手册
.exit      退出数据库程序
.quit      退出数据库程序  使用  .q  也可以
.open      打开数据库文件
.tables    列出数据库中所有的数据表
.schema    查看表结构(建表语句)
.headers on|off  查询的结果是否显示表头信息  on 显示 off  不显示

注意:sqlite3数据库需要先打开数据库文件再操作,否则所有的操作都是在内存上的,数据不会被保存在硬盘,当数据库程序退出时,数据就丢了。

打开数据库文件的方式:
方式1:先使用sqlite3命令进入到sqlite3数据库的终端
然后在终端上使用.open 数据库文件名 的方式打开数据库文件
方式2:也可以直接使用 sqlite3 数据库文件名 的方式打开数据库文件并进入数据库的终端

数据库文件名只要符合命名规范即可,但是一般我们书写时都以.db结尾方便识别。

(二)关系型数据库表

在这里插入图片描述

  1. 一个数据库文件中,可以有多个数据表,且每个数据表的结构可以不一样

(三)sql语句

  1. 只要是关系型数据库,sql语句都通用
  2. sql语句不能以 “.” 开头,结尾要加 “;
  3. sql语句中关键字不区分大小写,但是一般写成大写,方便区分
  4. sql语句中的字符串需要用单引号或者双引号引起来

1. 建表语句

新创建的数据库文件中是没有数据表的,需要自己创建

	//注意:新创建的数据库文件中是没有数据表的 需要我们自己创建
	CREATE TABLE 表名(字段名1 字段类型1, 字段名2 字段类型2, ...);
		字段类型:
			整形   INT 或者 INTEGER
			字符串 CHAR 或者 TEXT
	例如:
	CREATE TABLE student(id INT, name CHAR, score INTEGER);

2. 插入语句

	//sql语句中的字符串需要用 单引号 或者 双引号 引起来
	//这种插入方式必须从左到右给每个字段都赋值
	INSERT INTO student VALUES(1001, "zhangsan", 98);
	
	//如果只想给指定的字段赋值 可以用下面的用法
	INSERT INTO student(id, name) VALUES(1003, "wangwu");

3. 查询语句

	//查询所有记录的所有字段的内容
	//其中 * 表示 所有字段
	SELECT * FROM student;
	
	//查询表中所有记录的 name 和 score 字段
	SELECT name,score FROM student;
	
	//查询表中所有name='zhangsan' 的记录的所有字段
	SELECT * FROM student WHERE name='zhangsan';
	
	//多个条件 可使用 AND 或者 OR 连接
	// AND 并且     OR  或者
	//查询表中所有 name='zhangsan'并且score=98 的记录的所有字段
	SELECT * FROM student WHERE name='zhangsan' AND score=98;
	
	//查询表中所有name="zhangsan"的记录的 id 字段
	SELECT id FROM student WHERE name="zhangsan";
	
	//对查询结果可以排序
	// ORDER BY 字段名    根据哪个字段排序
	// ASC  升序   DESC  降序    不写时 默认是升序
	//查询表中所有name="zhangsan"的记录的所有字段 且结果根据成绩降序排序
	SELECT * FROM student WHERE name="zhangsan" ORDER BY score DESC;

4. 更新语句

	//把所有id=1005的记录的 score 字段的值都改成100
	UPDATE student SET score=100 WHERE id=1005;
	
	//一次该多个字段时  中间用 逗号 分隔
	UPDATE student SET score=80,name='lihua' WHERE id=1007;
	
	//注意:即使没有满足条件的记录 语句执行也不会报错 只不过没有现象发生
  • 注:即使没有满足条件的记录,语句执行也不会报错,只不过没有现象发生

5. 删除语句

	//删除表中所有 name="zhangsan" 或者 id=1003 的所有记录
	DELETE FROM student WHERE name='zhangsan' OR id=1003;
	
	//注意:即使没有满足条件的记录 语句执行也不会报错 只不过没有现象发生
  • 注:即使没有满足条件的记录,语句执行也不会报错,只不过没有现象发生

6. 删除表

	DROP TABLE 表名;

7. 对列的操作(一般不会用到)

添加一列
	ALTER TABLE student ADD COLUMN sex CHAR;

删除一列
	sqlite3 不允许直接删除一列
	1)先创建一张新表
		CREATE TABLE temp AS SELECT id,name FROM student;
	2)删除原来的旧表
		DROP TABLE student;
	3)对新表重命名
		ALTER TABLE temp RENAME TO student;

8. 主键

主键 PRIMARY KEY 
	在建表时可以自定某一个字段为 主键 然后在后插入的过程中
	CREATE TABLE student(id INT PRIMARY KEY, name TEXT, score INT);
  • 注:主键必须保持唯一, 如果插入重复主键的记录 会报错:主键冲突

四、常用的API接口函数

使用sqlite3数据的函数 编码时 需要加头文件 #include <sqlite3.h>
编译时,需要连接sqlite3数据库的库 -lsqlite3

(一)API接口函数

1. 打开和关闭数据库文件

int sqlite3_open(const char *filename,/* Database filename (UTF-8) */
                     sqlite3 **ppdb       /* OUT: SQLite db handle */  );
    功能:
        打开一个数据库  存在就直接打开  不存在就新建并打开
    参数:
        filename  数据库文件的路径和名字
        ppdb      操作数据库的指针,句柄。
    返回值:
        成功 SQLITE_OK
        失败 error_code

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

2. 获取错误信息描述

const char *sqlite3_errmsg(sqlite3 *db);
    功能:获取数据库句柄db对应的最后一次错误信息描述

3. 执行sql语句

	int sqlite3_exec(sqlite3 *db, const char *sql, 
				int (*callback)(void *, int, char **, char **),
				void *arg, char **errmsg);
	功能:
		执行一条sql语句
	参数:
		db			数据库的句柄指针
		sql			将要被执行sql语句
		callback	回调函数,只有在查询语句时,才会使用回调函数
		arg			为callback 传参的,只有在查询语句时,才给回调函数传参
		errmsg		错误信息的地址
						如果使用了 需要手动调用 sqlite3_free 来释放空间 防止内存泄漏
	返回值:
		成功 SQLITE_OK
		出错 errcode 错误码
		
补充:
	释放sqlite3_exec第五个参数占用的空间
	    void sqlite3_free(void *p);

sqlite3_exec 函数的回调函数 callback

	int callback(void *arg, int ncolumn, char **f_value, char **f_name)
	功能:
		得到查询结果
	参数:
		arg			为回调函数传递参数使用的
		ncolumn		记录中包含的字段的数目
		f_value		包含每个字段值的指针数组
		f_name		包含每个字段名称的指针数组
	返回值:
		成功 0
		出错 非0
  • 注:
  • 程序中写sql语句,结尾无需加分号,因为字符串结尾有\0来标识字符串结束。
  • IF NO EXISTS 标识如果存在就使用,不报错;
CREATE TABLE IF NOT EXISTS student(id INT PRIMARY KEY, name CHAR, score INT)

4. 查询数据库的函数

查询数据库的函数
	int sqlite3_get_table(sqlite3 *db, const char *zSql,
					char ***pazResult, int *pnRow, 
					int *pnColumn, char **pzErrmsg);
	功能:
		查询数据库,它会创建一个新的内存区域来存放查询的结果信息
	参数:
		db			数据库操作句柄
		sql			数据库的sql语句
		pazResult	查询的结果
		nRow		行数--不包含字段名
		nColumn		列数
		errmsg		错误消息 
				//和前面一样 如果使用了 要记得使用 sqlite3_free 释放空间
	返回值:
		成功 0
		出错 errcode

释放 sqlite3_get_table 函数产生的结果集
    void sqlite3_free_table(char **result)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 17的新特性

Java 17引入了多项新特性&#xff0c;以下是一些重要的更新&#xff1a; 增强的伪随机数生成器&#xff08;JEP 356&#xff09; Java 17为伪随机数生成器&#xff08;PRNG&#xff09;提供了新的接口类型和实现&#xff0c;包括可跳转的PRNG和另一类可拆分的PRNG算法&#xf…

06-操作元素

在前面的文章中重点介绍了一些元素的定位方法&#xff0c;定位到元素后&#xff0c;就需要操作元素了。本篇通过简单案例来介绍app应用中的一些常用操作。 一、案例介绍 下面列表中有四个字典&#xff0c;每个字典中的num1代表第一个操作数&#xff0c;num2代表第二个操作数&a…

LabVIEW电池管理系统测试平台

随着混合动力汽车技术的快速发展&#xff0c;对电池管理系统&#xff08;BMS&#xff09;的测试需求显著增加。利用LabVIEW软件开发了一款电池管理系统测试平台&#xff0c;通过模拟电池行为验证BMS的控制策略&#xff0c;从而降低成本、缩短开发周期&#xff0c;并提高整车的能…

js文件导出功能

效果图&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>html 表格导出道</title><script src"js/jquery-3.6.3.js"></script><st…

Qt打包成单独一个.exe文件运行

程序发布 1、首先找到你所运行的Qt编译器 2、然后去项目位置找到对应的release目录下的exe文件 3、将这个exe文件复制到一个单独的文件夹下&#xff0c;这里我放在E盘的demo下面 4、右键选择在终端打开PowerShell进入步骤1新建的demo目录内 5、windeployqt 项目名.exe windepl…

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

PLC模拟量和数字量到底有什么区别?

PLC模拟量和数字量的区别 在工业自动化领域&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;是控制各种机械设备和生产过程的核心组件。PLC通过处理模拟量和数字量来实现对工业过程的精确控制。了解模拟量和数字量的区别对于设计高效、可靠的自动化系统至关重要。 1. …

[面试题]消息队列

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列 什么是…

异构集成封装类型2D、2.1D、2.3D、2.5D和3D封装技术

异构集成封装类型&#xff1a;2D、2.1D、2.3D、2.5D和3D封装详解 简介随着摩尔定律的放缓&#xff0c;半导体行业越来越多地采用芯片设计和异构集成封装来继续推动性能的提高。这种方法是将大型硅芯片分割成多个较小的芯片&#xff0c;分别进行设计、制造和优化&#xff0c;然后…

如何通过自己编写Jmeter函数

在Jmeter的函数助手里&#xff0c;有很多内置的函数&#xff0c;比如Random、UUID、time等等。使用这些函数可以快速帮我们生成某些数据&#xff0c;进行一些逻辑处理。用起来非常的方便。 但是在实际接口测试过程中&#xff0c;有很多的需求&#xff0c;Jmeter内置的函数可能…

决策树概念

图例 概念 决策树基本上就是对经验的总结 决策树的构成&#xff0c;分为两个阶段。构造和剪枝 构造 概念 构造就是生成一颗完整的决策树。构造的过程就是选择什么属性作为节点的过程 构造过程&#xff0c;会存在3种节点 根节点&#xff1a;就是树的最顶端&#xff0c;最…

四十九、openlayers官网示例Immediate Rendering (Geographic)——在地图上绘制星空动画效果

官网demo地址&#xff1a; Immediate Rendering (Geographic) 首先先创建1000个随机点&#xff0c;创建点对象。 const n 1000;const geometries new Array(n);for (let i 0; i < n; i) {const lon 360 * Math.random() - 180;const lat 180 * Math.random() - 90;ge…

英伟达市值飙升,超越苹果微软并超过英国股市总市值

原标题&#xff1a;英伟达超越苹果微软市值&#xff0c;成为全球市值最高的企业 易采游戏网6月19日消息&#xff1a;近日&#xff0c;美国科技巨头英伟达市值的迅速增长引起了市场广泛关注。据最新数据显示&#xff0c;截至本周二收盘&#xff0c;英伟达的市场资本化已达到3.34…

PhantomReference 和 WeakReference 究竟有何不同

本文基于 OpenJDK17 进行讨论&#xff0c;垃圾回收器为 ZGC。 提示&#xff1a; 为了方便大家索引&#xff0c;特将在上篇文章 《以 ZGC 为例&#xff0c;谈一谈 JVM 是如何实现 Reference 语义的》 中讨论的众多主题独立出来。 PhantomReference 和 WeakReference 如果仅仅从概…

在二维空间中用椭圆表示不确定性

在二维空间中用椭圆表示不确定性 flyfish import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse# 生成示例数据 np.random.seed(0) data np.random.multivariate_normal([0, 0], [[4, 2], [2, 3]], size500)# 计算均值和协方差矩阵 …

Java15-API

目录 Math类 概述 常见方法 练习 System类 概述 常见方法 Runtime 概述 常见方法 Object类 概述 常见方法 一.演示toString方法 二.演示equals方法 三、对象克隆 分类&#xff1a; 浅克隆 深克隆&#xff1a; Objests类 概述 常见方法 BigInteger类 概…

基于C++、MFC和Windows套接字实现的简单聊天室程序开发

一、一个简单的聊天室程序 该程序由服务器端和客户端两个项目组成&#xff0c;这两个项目均基于对话框的程序。服务器端项目负责管理客户端的上线、离线状态&#xff0c;以及转发客户端发送的信息。客户端项目则负责向服务器发送信息&#xff0c;并接收来自服务器的信息&#…

keil5显示内存和存储占用百分比进度条工具

简介 [Keil5_disp_size_bar] 以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况, 并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。 原理是使用C语言遍历当前目录找到keil工程和编译后生成的map文件 然后读取工程文件和m…

【linux】Valgrind工具集详解(十六):交叉编译、移植到arm(失败)

1、源码下载 官网:https://valgrind.org/ 源码:https://valgrind.org/downloads/current.html 2、配置 ./configure CC=arm-linux-gnueabihf-gcc \CXX=arm-linux-gnueabihf-g++ \AR=arm-linux-gnueabihf-ar \--host=arm-linux-gnueabihf \--pr

急,在线等!老板让我做数仓一点思路没有怎么办

刚来公司一个月&#xff0c;老板就让我负责了公司数据仓库的建设&#xff0c;但我一点思路都没有这可咋整&#xff01; 在了解公司人事部门和行政部门的相关数据存在数据孤岛的问题后&#xff0c;我决定从人事系统入手。目前公司的数据还存在一些问题亟待解决&#xff1a; 1.员…