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 字段的值都改成100UPDATE 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_codeint 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)

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

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

相关文章

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89402192 更多资源下载&#xff1a;关注我。

【OceanBase诊断调优】 —— DDL时报磁盘不足问题排查

1. 背景 由于在4.x的部分版本中&#xff0c;我们对于一些ddl操作还存在磁盘空间放大问题&#xff0c;本文主要介绍了这一类问题的排查。 2. 问题排查 2.1 整体排查链路 2.2 问题现象 DDL过程中报磁盘空间不足&#xff0c;需要确认是否符合预期&#xff0c;如果是符合预期&a…

1980python个性化电影推荐管理系统mysql数据库Django结构layUI布局elasticsearch存储计算机软件工程网页

一、源码特点 python Django个性化电影推荐管理系统是一套完善的web设计系统mysql数据库 利用elasticsearch存储浏览数据 &#xff0c;对理解python编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 开发环境pycharm…

基于STM32的智能水产养殖系统(四)

硬件原理 步进电动机 步进电动机&#xff08;Step Motor 或 Stepper Motor&#xff09;是一种将电脉冲信号转换成对应的角位移或线位移的电动机。与普通电动机不同&#xff0c;步进电动机每接收到一个脉冲信号&#xff0c;就会按设定的角度&#xff08;步距角&#xff09;转动…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应&#xff0c;即当一块通有电流的金属或半导体薄片垂直地放在磁场中时&#xff0c;薄片的两端会产生电位差。这种现象称为霍尔效应&#xff0c;两端具有的电位差值称为…

STM32通过I2C软件读写MPU6050

文章目录​​​​​​​ 1. MPU6050 1.1 运动学概念 1.2 工作原理 2. 参数 2.1 量程选择 2.2 I2C从机地址配置 3. 硬件电路 4. 框架图 5. 软件和硬件波形对比 6. 软件I2C读写MPU6050 6.1 程序整体构架 6.2 一些需要注意的点&#xff1a; 6.3 MPU6050初始化配置 6…

【Python/Pytorch 】-- 滑动窗口算法

文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是&#xff1a;训练了一个时序网络&#xff0c;该网络模型的时序维度为32&#xff0c;而测试数据的时序维度为90。因此需要采用滑动窗口的方法&#xff0c;生成一系列32…

第58章SOCKET:TCP/IP网络基础

58.1 互联网 互联网会将不同的计算机网络连接起来并允许位于网络中的主机相互之间进行通信。互联网的目标是隐藏不同物理网络的细节以便向互联网中的所有主机呈现一个统一的网络架构&#xff0c;TCP/IP已经成了使用最为广泛的协议套件了&#xff0c; 术语Internet被用来指将全球…

【STM32-启动文件】

STM32-启动文件 ■ STM32-启动文件■ STM32-启动文件主要做了以下工作&#xff1a;■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■■■ ■■■■■ ■ STM32-启动文件 STM32 启动文件由 ST 官方提供 启动文件由汇编编写&#xff0c;是系统上电复位后第一个…

数据分析第十三讲:数据可视化入门(二)

数据可视化入门&#xff08;二&#xff09; 本章我们尝试用 matplotlib 来绘制一些高阶统计图表。正如前面所说的&#xff0c;大家可以通过 matplotlib 官方网站上提供的文档和示例来学习如何使用 matplotlib 并绘制出更加高级的统计图表&#xff1b;尤其是在定制一些比较复杂…

旅游管理平台系统

摘要 如今许多地区的风景已经随着网络技术的不断发展和进步而映入人们的眼帘&#xff0c;旅游已经成为一种大众化的休闲方式。而青海海西州风光旖旎&#xff0c;民族文化独特&#xff0c;更是吸引了众多游客纷至沓来。海西州地域广阔、人烟稀少、是一个经济发展缓慢的地方&…

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险&#xff0c;包括数据泄露、账号被盗以及恶意软件的安装。因此&#xff0c;利用合适的Wi-Fi安全措施是非常重要的&#xff0c;了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…

Python的三种方式显示图片

from PIL import Image import numpy as np im Image.open("img.png") #方法一&#xff1a;使用PIL库显示图片 a np.array(im) imImage.fromarray(a) im.show() import matplotlib.pyplot as plt #方法二&#xff1a;使用matplotlib库显示图片 plt.imshow(a) plt.s…

AI在创造还是毁掉音乐

目录 1.概述 2.整体介绍 3.人机合作 3.1. AI作为助手 3.2. AI作为创意源泉 3.3. 交互式合作 3.4. AI独立创作与音乐人后期制作 3.5.试点和挑战 4.伦理道德 4.1.AI替代人类的可能性 4.2.伦理道德问题 4.3.平衡技术与创造力 4.4.小结 1.概述 近期音乐大模型的兴起&…

OceanBase 并行执行参数 parallel_servers_target 理解

为了最大程度降低 PX 使用难度&#xff0c;OceanBase 3.1 版起&#xff0c;parallel_max_servers 参数废弃。 用户只需用好 parallel_servers_target 即可。 target 的用途 用一个酒吧的例子来粗略理解下 parallel_servers_target 的意思&#xff1a; target 先生开了一个酒…

Qt画五角星,简单图表

五角星&#xff1a; 代码&#xff1a; widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> Widget::Widget(QWidget *parent): QWidget(parent), ui(new U…

STM32多功能交通灯系统:从原理到实现

一、功能说明 本交通灯系统采用先进的stm32f103c8t6微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管&#xff0c;用以精准展示5至99秒的时间范围&#xff0c;并且允许用户根据实际需求进行灵活调整。 在信号灯配置方面&#xff0c;每个方向均配备左转、直…

Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程

项目介绍 开源的项目&#xff0c;感谢各位大佬的贡献&#xff01; 官方介绍&#xff1a;一个简单的本地网页界面&#xff0c;使用ChatTTS将文字合成为语音&#xff0c;同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into spe…

科技赋能冷链园区:可视化带来全新体验

应用图扑可视化技术&#xff0c;冷链园区能够更加直观地监控和管理资源&#xff0c;优化运作流程&#xff0c;提高运营效率与服务质量。

Spring Bean详解

Spring Bean作用域 默认情况下&#xff0c;所有的 Spring Bean 都是单例的&#xff0c;也就是说在整个 Spring 应用中&#xff0c; Bean 的实例只有一个 如果我们需要创建多个实例的对象&#xff0c;那么应该将 Bean 的 scope 属性定义为 prototype&#xff0c;如果 Spring 需…