当前位置: 首页 > news >正文

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)

相关文章:

Sqlite3数据库基本使用

一、基本概念 数据&#xff1a;能够输入计算机并能被计算机程序识别和处理的信息集合 数据库&#xff1a;长期存储在计算机内、有组织的、可共享的大量数据的集合 DBMS&#xff1a;位于用户与操作系统之间的一层数据管理软件&#xff0c;用于操纵和管理数据库 二、安装 在线…...

实现贪吃蛇小游戏【简单版】

1. 贪吃蛇游戏设计与分析 1.1 地图 我们最终的贪吃蛇大纲要是这个样子&#xff0c;那我们的地图如何布置呢&#xff1f; 这里不得不讲⼀下控制台窗口的⼀些知识&#xff0c;如果想在控制台的窗口中指定位置输出信息&#xff0c;我们得知道该位置的坐标&#xff0c;所以首先介…...

uniapp实现内嵌其他网页的功能

一、用到的知识点 页面跳转页面间跳转&#xff0c;参数传递web-view使用 二、使用navigator 页面跳转。 navigator 组件类似HTML中的<a>组件&#xff0c;但只能跳转本地页面。目标页面必须在pages.json中注册。所以这么写是不行的&#xff1a; <navigator url&quo…...

【Ruby简单脚本01】查看wifi密码

脚本 # 使用io库 def get_cmd_result(cmd) IO.popen(cmd,:external_encoding>GBK).read.encode("utf-8") end def list_wifi wifi_pwds Hash.new # 获取所有wifi文件 o1 get_cmd_result("netsh wlan show profiles") # 获取所有匹配结果 …...

VSG/VSA 矢量信号模拟/分析软件

_Ceyear思仪 _ VSG/VSA 矢量信号模拟/分析软件 苏州新利通仪器仪表 在现代无线通信中&#xff0c;IQ调制属于标准配置&#xff0c;经常应用于通信系统的信号调制和解调环节。IQ调制的应用简化了通信设备的硬件结构&#xff0c;同时提高了频谱资源的利用效率&#xff0c;提…...

C++使用GDAL库完成tiff图像的合并

全色图 完整代码&#xff1a; #include "gdal_priv.h" #include "cpl_string.h" #include <vector> #include <algorithm> #include <iostream> #include <filesystem>using namespace std; namespace fs std::filesystem; vec…...

深入理解AQS:Java并发编程中的核心组件

目录 AQS简介AQS的设计思路AQS的核心组成部分 状态&#xff08;State&#xff09;同步队列&#xff08;Sync Queue&#xff09;条件队列&#xff08;Condition Queue&#xff09; AQS的内部实现 节点&#xff08;Node&#xff09;锁的获取与释放 独占锁共享锁 条件变量 AQS的应…...

集合进阶:List集合

一.List集合的特有方法 1.Collection的方法List都继承了 2.List集合因为有索引,所以多了很多索引操作的方法。 3.add // 1.创建一个集合List<String> list new ArrayList<>(); // 2.添加元素list.add("aaa");list.add("bbb"…...

el-table表头修改文字或者背景颜色,通过header-row-style设置样式

方式一 <el-table :header-cell-style"{text-align: center}" />方式二 <template><el-table :header-cell-style"tableHeaderColor" /> </template> <script> export default {methods: {tableHeaderColor ({row, column…...

web前端-CSS

CSS CSS概述: CSS是Cascading Style Sheets&#xff08;级联样式表&#xff09;,是一种样式表语言,用于控制网页布局,外观(比如背景图片,图片高度,文本颜色,文本字体,高级定位等等) 可将页面的内容与样式分离开,样式放于单独的.css文件或者HTML某处 CSS是网页样式,HTML是网页…...

u8g2 使用IIC驱动uc1617 lcd 字符显示只显示上半部分,不显示下半部

使用u8g2 使用硬件iic驱动某些page为4个字节 带灰度的lcd显示屏幕的时候有时候只显示上半部,下半部不显示,例如uc1617等。 原因: 以uc1617为例,链接https://github.com/olikraus/u8g2/blob/master/csrc/u8x8_d_uc1617.c 在u8x8_d_uc1617_common方法中的case U8X8_MSG_DI…...

单片机第五季-第八课:STM32CubeMx和FreeRTOS

1&#xff0c;FreeRTOS背景介绍 RTOS简介&#xff1a; 实时操作系统&#xff0c;本用于追求实时性的嵌入式系统&#xff0c;典型&#xff1a;ucos/uclinux/vxworks&#xff1b; 特点&#xff1a;中断响应快、一般可嵌套中断、使用实地址、多任务&#xff1b; &#xff08;实…...

【Linux】进程控制1——进程创建和进程终止

1.进程创建 1.1.再谈fork 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void);//pid_t为整形 返回值&#xff1a;子进程中的fork()返回0&#xff…...

计算机图形学入门16:曲线

1.曲线 曲线&#xff08;Curves&#xff09;在图形学中应用非常广泛&#xff0c;比如&#xff1a;相机的拍摄路径、物体的移动路径、动画曲线、矢量字体等。如下图所示&#xff0c;是使用曲线到矢量字体的应用&#xff0c;通过移动一些控制点来改变字体。 2.贝塞尔曲线 2.1 贝…...

【Ruby基础01】windows和termux中搭建Ruby开发环境

windows下环境搭建 railsinstaller官方git地址 按照文档安装git、nodejs、yarn&#xff0c;安装教程百度一下。railsinstall可以从release页面下载最新版本4.1.0。 安装完成如下 安装RubyMine 下载RubyMine RubyMine下载地址 安装激活 下载文件&#xff0c;按照里面的流程…...

2406c++,iguana动态反射

原文 iguana是一个基于编译期反射的序化库,支持从结构序化到不同数据格式. iguana可序化一个C结构到json,xml,yaml和protobuf格式.这都是通过编译期反射实现的. 现在iguana也支持了动态反射,主要特征: 1,通过对象名创建对象实例 2,取对象所有字段名 3,根据字段名取字段值 4,根…...

干货分享——AB站帮你解决独立站收款难题

目前&#xff0c;国内已经有抖音、拼多多和淘宝平台推出“仅退款”售后服务&#xff0c;无疑是加剧了原本就在疯狂打价格战的国内电商的严峻现状&#xff0c;使得商家不得不担心被顾客“薅羊毛”。在国内电商环境严重“内卷”的情况下&#xff0c;拓宽海外市场不失为一大妙计。…...

C++继承与派生

1.基本知识 类的继承是新类从已有类那里获得特性&#xff0c;从已有的类产生新类的过程称为类的派生&#xff1b; 已有类称为基类或父类&#xff0c;派生出的新类则称为派生类或子类&#xff1b; 继承的功能&#xff1a; &#xff08;1&#xff09;使得基类与派生类之间建立…...

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:...

Cargo 教程

Cargo 教程 1. 引言 Cargo 是 Rust 编程语言的包管理器和构建工具。它为 Rust 项目提供了依赖管理、编译和打包等功能。本教程将详细介绍 Cargo 的基本用法,帮助您快速上手 Rust 项目开发。 2. 安装 Cargo 在开始使用 Cargo 之前,您需要确保已经安装了 Rust 编程语言。Ru…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...