数据库_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、更新软件源: sudo apt-get update 2、下载SQLite3: sudo apt-get install sqlite3 3、验证: sqlite3启动数据库,出现以下界面代表运行正常。输入 .exit 可以退出数据库 4、安装sqlite3的库 sudo apt-get install l…...
.Net Framework里演示怎么样使用StringBuilder、Math.Min和String.Format
StringBuilder、Math.Min和String.Format, 这几个功能都是我们经常使用的功能, 但是怎么样正确地使用,还是得向微软的开发人员学习。 他们在写.Net Framework的源码时,就会大量使用。 因此,我们可以多看看这分代码,就可以理解他们怎么样使用的。 他们的使用方式,一…...
Oracle创建存储过程,创建定时任务
在Oracle数据库中,创建存储过程和定时任务(也称为调度任务)是常见的数据库管理任务。以下是创建存储过程和定时任务的步骤和说明。 创建存储过程 创建存储过程的sql脚本 create or replace procedure 存储过程名称... is begin脚本逻辑...…...

<HarmonyOS第一课>应用/元服务上架的课后习题
善者,吾善之; 不善者,吾亦善之,德善。 信者,吾信之; 不信者,吾亦信之,德信。 圣人在天下,歙歙焉为天下浑其心,百姓皆注其耳目,圣人皆孩之。 通过&…...

【Python】探索函数的奥秘:从基础到高级的深度解析(下)
目录 🍔 函数的参数进阶 1、函数的参数 2、函数的参数类型(调用) 2.1 位置参数 2.2 关键词参数(Python特有) 3、函数定义时缺省参数(参数默认值) 4、不定长参数 4.1 不定长元组(位置)参数…...

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

Vue-$el属性
原博客地址:深入 Vue.js 的心脏:全面剖析 $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是励磁电感,就是次级线圈空载时的主变压器电感,据说在计算谐振频率时无需关心。然后,作为DCDC电源,它通过调整谐振频率,来改变输出的电流。负载越大,频率越低&#…...

Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化
Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分,它能帮助我们更好地理解和解释数据。在现代应用中,越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…...
C#-数组:一维数组、二维数组、交错数组
数组:声明初始化过后,就不能在原有的基础上进行 添加 或者 删除 了 一:一维数组 一般将一维数组简称为数组 1.1 数组的声明 int[] arr1; 没有分配房间。初始化后就分配房间了int[] arr2 new int[5]; 存在默认值,为0int[] arr3…...

动态规划应该如何学习?
动态规划如何学习 参考灵神的视频和题解做的笔记(灵神YYDS,以后也都会用这套逻辑去思考) 枚举选哪个: 动态规划入门:从记忆化搜索到递推_哔哩哔哩_bilibili 746. 使用最小花费爬楼梯 - 力扣(LeetCode&a…...
【力扣 + 牛客 | SQL题 | 每日4题】牛客SQL热题210,213,212,219
1. 力扣SQL1076:项目员工2 1.1 题目: 表:Project ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- (project_id, employee_id) 是…...
Qt 应用开发之 MVC 架构
在Qt应用开发中,MVC(Model-View-Controller)架构确实是一种常用的设计模式,它通过将应用程序的业务逻辑、数据展示和用户交互分离开来,显著提高了代码的可维护性和可扩展性。以下是MVC架构在Qt应用开发中的原理阐述&am…...

python之字符串总结
字符串(str) 对于字符串的学习,我整理了网上的一些资料,希望可以帮助到各位!!! 概述 由多个字母,数字,特殊字符组成的有限序列 字符串的定义:可以使用一对…...
Flutter鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
sql server复制一张表(表结构或表数据)SQL语句整理
1. 复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表;这种方法会复制 旧表 中的所有内容到 新表,但新表不会保留原表的主键、自动递增等属性。为了保持这些属性,需要使用 ALTER 语句进行后续处理 2. 只复制表结构到新表 使用条件始终为假…...

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

记本地第一次运行seatunnel示例项目
前置 静态源码编译通过:https://blog.csdn.net/u011924665/article/details/143372464 参考 seatunnel官方的开发环境搭建文档:https://seatunnel.incubator.apache.org/zh-CN/docs/2.3.5/contribution/setup 安装scala 下载scala 去官网下载&…...
Threejs 实现 VR 看房完结
效果: threejs 3d Vr 看房 gitee 地址: threejs-3d-map: 1、threejs 实现3d 地图效果链接:https://blog.csdn.net/qq_57952018/article/details/1430539902、threejs 实现 vr 看房 主要代码: src/views/PanoramicView/index.vu…...
找出目标值在数组中的开始和结束位置(二分查找)
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1:…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

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

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...