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

数据库_SQLite3

下载

1、更新软件源:

sudo apt-get update

2、下载SQLite3:

sudo apt-get install sqlite3

3、验证:

sqlite3启动数据库,出现以下界面代表运行正常。输入 .exit 可以退出数据库

4、安装sqlite3的库

sudo apt-get install libsqlite3-dev,之后编译c代码时需要加上 -l sqlite3

5、打开数据库

sqlite3 <数据库文件名>

命令

回车可以换行输入,但本命令并不结束。输入 " ; " 后,本命令结束

1、以.开头的命令

.help:显示所有以.开头的命令

.exit:退出sqlite3

.table:显示当前已存在的表格

.headers on:开启显示表头

.mode column:查询时以列的形式显示结果

2、SQL语句

2.1 创建表格

语法:

CREATE TABLE table_name (column_1 data_type constraints,column_2 data_type constraints,...,column_n data_type constraints
);

CREATE TABLE:创建表格的语句

table_name:表格的名字

column_1:表格的第一个参数

data_type:参数类型

data_type值含义
INTEGER整型 int
TEXT存储大量文本
REAL双精度浮点数

constraints:参数约束

constraints值含义
PRIMARY KEY主键,这具有唯一性的特点
NOT NULL非空,这代表该参数必须填写
AUTOINCREMENT自动增加

示例:

创建一个名为“students”的学生信息表。该表将包含以下列:ID,姓名,年龄,性别和成绩。

CREATE TABLE students (ID INTERGER PRIMARY KEY NOT NULL,name TEXT NOT NULL,age INTEGER NOT NULL,gender TEXT NOT NULL,score REAL NOT NULL
);

students:表格名为students 

ID:第一个参数是ID

INTERGER:参数类型是int型

PRIMARY KEY:主键,这具有唯一性的特点

NOT NULL:非空,这代表该参数必须填写

2.2 删除表

语法: 

DROP TABLE table_name

table_name:要删除的表的名字

示例:

DROP TABLE students;

2.3 插入数据

语法: 

INSERT INTO table_name (column_1, column_2, ..., column_n)
VALUES (value_1, value_2, ..., value_n);

table_name:表名

column_1:第一个参数的名字,与创建表时的名字一致

value_1:第一个参数的值

示例:

向students表中插入一条数据,ID=1,name=张三,age=18,gender=男,score=90.0

INSERT INTO students (ID, name, age, gender, score)values(1,'张三', 18, '男', 90.0);

2.4 查询数据

语法:

SELECT column_1, column_2, ..., column_n 
FROM table_name;

column_1:参数名,写*代表全部参数

table_name:表名

示例:

查询 students表中的全部参数

SELECT * FROM students;

2.5 更新表格

语法: 

UPDATE table_name
SET column_1 = value_1, column_2 = value_2, ..., column_n = value_n
WHERE condition;

table_name:表名

column_1 = value_1:将参数column_1的值更新为value_1

condition:条件,只有满足条件时更新这个内容

示例:

将表students中id=1的内容更新为名字=no哈哈,分数=50 

UPDATE students
SET name = 'no哈哈',score = 50
WHERE id = 1;

2.6 删除数据

 语法: 

DELETE FROM table_name WHERE condition;

table_name: 表名

condition:条件,只有满足条件时删除这个内容

示例:

删除表students中id = 1的数据 

DELETE FROM students WHERE id = 1;

3、常用API

3.1 打开数据库 

int sqlite3_open(const char *filename,   /* 数据库文件的路径 */sqlite3 **ppDb          /* 用于存储数据库连接的指针 */
);

返回值:成功返回SQLITE_OK

filename:数据库文件的路径,当filename不存在时,会自动创建一个数据库文件。

ppDb:用于存储数据库连接的指针

3.2 关闭数据库

int sqlite3_close(sqlite3 *db);

返回值:成功返回SQLITE_OK

db:sqlite3_open传入的参数ppDb

3.3 打印错误

const char *sqlite3_errmsg(sqlite3 *db);

返回值:错误信息,没有错误时不打印信息。

db:sqlite3_open传入的参数ppDb

3.4 执行SQL语句

int sqlite3_exec(sqlite3 *db,                                /* 数据库连接 */const char *sql,                            /* 要执行的 SQL 语句 */int (*callback)(void*,int,char**,char**),   /* 回调函数 */void *arg,                                  /* 传递给回调函数的参数 */char **errmsg                               /* 用于存储错误消息的指针 */
);

返回值:成功返回SQLITE_OK 

db:sqlite3_open传入的参数ppDb

sql:sql语句

callback:执行查询语句时会用到该函数,其余时候写NULL即可。参数含义如下:

参数含义
void*sqlite3_exec中的arg参数值
int查询结果所返回的列数,有多少个字段就有多少列
char**(第一个)每个字段的值
char**(第二个)每个字段的名称

注意:callback函数必须return 0,否则会报错query aborted

3.5 释放空间 

void sqlite3_free(void *p);

功能与free一样,释放malloc申请的空间。

sqlite3_exec的参数errmsg实际上申请了一个空间,使用之后应该调用sqlite3_free释放空间。

实验代码

使用c语言,编程实现"SQL语句"章节的相关功能。

具体代码实现如下:

#include <stdio.h>
#include <sqlite3.h>/** callback:sqlite3_exec的回调函数* param arg:sqlite3_exec函数中传入的arg参数的值* param argc:有多少个字段 (比如该代码中argc就是5) * param argv:字段的值 (比如第一个ID的值就是1,2,3.....)* param azColName:字段的名字 (比如该代码中就是ID, name, age, gender,score这几个字段) * */
int callback(void* arg,int argc,char** argv,char** azColName){int i;//printf("get callback,arg = %d,argc = %d\n",(int)arg,argc);for(i=0;i<argc-1;i++){printf("%s = %s\n",azColName[i], argv[i] ? argv[i] : "NULL" );}return 0; //这里必须返回0
}int main(){sqlite3 *db;char* errmsg = NULL;char* sql_create = "CREATE TABLE students 	 ( 			\ID INTERGER PRIMARY KEY NOT NULL, 	\name TEXT NOT NULL, 				\age INTEGER NOT NULL, 				\gender TEXT NOT NULL, 				\score REAL NOT NULL 				\);";char* sql_insert = "INSERT INTO students (ID, name, age, gender, score) values(1,'张三', 18, '男', 90.0);\INSERT INTO students (ID, name, age, gender, score) values(2,'李四', 19, '女', 91.0);\INSERT INTO students (ID, name, age, gender, score) values(3,'王五', 20, '男', 92.0);\";char* sql_select = "SELECT * FROM students;";//1.打开数据库if(sqlite3_open("./mydatabase.db",&db) != SQLITE_OK){sqlite3_errmsg(db);return -1;}//2.执行sql语句if(sqlite3_exec(db,sql_create,NULL,NULL,&errmsg) != SQLITE_OK){printf("sqlite3_exec err:%s\n",errmsg);sqlite3_free(errmsg);return -1;}if(sqlite3_exec(db,sql_insert,NULL,NULL,&errmsg) != SQLITE_OK){printf("sqlite3_exec err:%s\n",errmsg);sqlite3_free(errmsg);return -1;}if(sqlite3_exec(db,sql_select,callback,NULL,&errmsg) != SQLITE_OK){printf("sqlite3_exec err:%s\n",errmsg);sqlite3_free(errmsg);return -1;}//3.关闭数据库sqlite3_close(db);return 0;
}

代码运行结果如下:

练习:联系人管理系统

实现功能:

数据库名为test.db,能够向数据库中增删改查联系人数据。

实现代码:

见绑定资源包

相关文章:

数据库_SQLite3

下载 1、更新软件源&#xff1a; sudo apt-get update 2、下载SQLite3&#xff1a; sudo apt-get install sqlite3 3、验证&#xff1a; sqlite3启动数据库&#xff0c;出现以下界面代表运行正常。输入 .exit 可以退出数据库 4、安装sqlite3的库 sudo apt-get install l…...

.Net Framework里演示怎么样使用StringBuilder、Math.Min和String.Format

StringBuilder、Math.Min和String.Format, 这几个功能都是我们经常使用的功能, 但是怎么样正确地使用,还是得向微软的开发人员学习。 他们在写.Net Framework的源码时,就会大量使用。 因此,我们可以多看看这分代码,就可以理解他们怎么样使用的。 他们的使用方式,一…...

Oracle创建存储过程,创建定时任务

在Oracle数据库中&#xff0c;创建存储过程和定时任务&#xff08;也称为调度任务&#xff09;是常见的数据库管理任务。以下是创建存储过程和定时任务的步骤和说明。 创建存储过程 创建存储过程的sql脚本 create or replace procedure 存储过程名称... is begin脚本逻辑...…...

<HarmonyOS第一课>应用/元服务上架的课后习题

善者&#xff0c;吾善之&#xff1b; 不善者&#xff0c;吾亦善之&#xff0c;德善。 信者&#xff0c;吾信之&#xff1b; 不信者&#xff0c;吾亦信之&#xff0c;德信。 圣人在天下&#xff0c;歙歙焉为天下浑其心&#xff0c;百姓皆注其耳目&#xff0c;圣人皆孩之。 通过&…...

【Python】探索函数的奥秘:从基础到高级的深度解析(下)

目录 &#x1f354; 函数的参数进阶 1、函数的参数 2、函数的参数类型(调用) 2.1 位置参数 2.2 关键词参数&#xff08;Python特有&#xff09; 3、函数定义时缺省参数&#xff08;参数默认值&#xff09; 4、不定长参数 4.1 不定长元组&#xff08;位置&#xff09;参数…...

ima.copilot:智慧因你而生

在数字化时代&#xff0c;信息的获取、处理和创作已经成为我们日常工作和学习中不可或缺的一部分。腾讯公司推出的ima.copilot&#xff08;简称ima&#xff09;正是为了满足这一需求&#xff0c;它是一款由腾讯混元大模型提供技术支持的智能工作台产品&#xff0c;旨在通过智能…...

Vue-$el属性

原博客地址&#xff1a;深入 Vue.js 的心脏&#xff1a;全面剖析 $el 属性_vue $el-CSDN博客 目录 1 $el是什么 1.1 $el本质 1.2 访问$el时机 1.3 $el与模板的关系 2 $el使用场景 2.1 集成第三方库 2.2 操作DOM元素样式 2.3 处理焦点和事件 2.4 实现自定义指令 3 $e…...

LLC Power Switches and Resonant Tank 笔记

1.概述 上面是一个典型的LLC电路。注意Lm是励磁电感&#xff0c;就是次级线圈空载时的主变压器电感&#xff0c;据说在计算谐振频率时无需关心。然后&#xff0c;作为DCDC电源&#xff0c;它通过调整谐振频率&#xff0c;来改变输出的电流。负载越大&#xff0c;频率越低&#…...

Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化

Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分&#xff0c;它能帮助我们更好地理解和解释数据。在现代应用中&#xff0c;越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…...

C#-数组:一维数组、二维数组、交错数组

数组&#xff1a;声明初始化过后&#xff0c;就不能在原有的基础上进行 添加 或者 删除 了 一&#xff1a;一维数组 一般将一维数组简称为数组 1.1 数组的声明 int[] arr1; 没有分配房间。初始化后就分配房间了int[] arr2 new int[5]; 存在默认值&#xff0c;为0int[] arr3…...

动态规划应该如何学习?

动态规划如何学习 参考灵神的视频和题解做的笔记&#xff08;灵神YYDS&#xff0c;以后也都会用这套逻辑去思考&#xff09; 枚举选哪个&#xff1a; 动态规划入门&#xff1a;从记忆化搜索到递推_哔哩哔哩_bilibili 746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&a…...

【力扣 + 牛客 | SQL题 | 每日4题】牛客SQL热题210,213,212,219

1. 力扣SQL1076&#xff1a;项目员工2 1.1 题目&#xff1a; 表&#xff1a;Project ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- (project_id, employee_id) 是…...

Qt 应用开发之 MVC 架构

在Qt应用开发中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;架构确实是一种常用的设计模式&#xff0c;它通过将应用程序的业务逻辑、数据展示和用户交互分离开来&#xff0c;显著提高了代码的可维护性和可扩展性。以下是MVC架构在Qt应用开发中的原理阐述&am…...

python之字符串总结

字符串&#xff08;str&#xff09; 对于字符串的学习&#xff0c;我整理了网上的一些资料&#xff0c;希望可以帮助到各位&#xff01;&#xff01;&#xff01; 概述 由多个字母&#xff0c;数字&#xff0c;特殊字符组成的有限序列 字符串的定义&#xff1a;可以使用一对…...

Flutter鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…...

sql server复制一张表(表结构或表数据)SQL语句整理

1. 复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表;这种方法会复制 旧表 中的所有内容到 新表&#xff0c;但新表不会保留原表的主键、自动递增等属性。为了保持这些属性&#xff0c;需要使用 ALTER 语句进行后续处理 2. 只复制表结构到新表 使用条件始终为假…...

c语言-进位计数制

文章目录 一、进位计数制是什么&#xff1f;二、c语言1.二进制转十进制2.十进制转二进制 一、进位计数制是什么&#xff1f; 进位计数制简称进制&#xff0c;是人类用于计算数量的基本规则。 可使用数字符号的数目称为基数或底数&#xff0c;基数个数为n个&#xff0c;即可称n…...

记本地第一次运行seatunnel示例项目

前置 静态源码编译通过&#xff1a;https://blog.csdn.net/u011924665/article/details/143372464 参考 seatunnel官方的开发环境搭建文档&#xff1a;https://seatunnel.incubator.apache.org/zh-CN/docs/2.3.5/contribution/setup 安装scala 下载scala 去官网下载&…...

Threejs 实现 VR 看房完结

效果&#xff1a; threejs 3d Vr 看房 gitee 地址&#xff1a; threejs-3d-map: 1、threejs 实现3d 地图效果链接&#xff1a;https://blog.csdn.net/qq_57952018/article/details/1430539902、threejs 实现 vr 看房 主要代码&#xff1a; src/views/PanoramicView/index.vu…...

找出目标值在数组中的开始和结束位置(二分查找)

给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&#xff1a…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...