数据库_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;
//条件查询
SELECT column1, column2 FROM table_name WHERE condition;

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;
}

代码运行结果如下:

将资源导入数据库

可导入到数据库的文件:

sqlite3允许将.csv格式的文件导入到数据库,.csv文件是由excel文件生成。因此我们首先将英汉对照表写入到excel中,再将后缀改为.csv,之后再使用命令将.csv导入到数据库,这样就实现了获取数据库资源。

具体步骤:

1、在excel表中整理好英汉对应表

2、另存为excel表,另存为格式为.csv

3、验证.csv数据,.csv文件可以用记事本打开,数据显示如下:

数据没问题后,将windows下的.csv文件拷贝到linux下

4、将.csv的内容导入到数据库中

这里.csv文件名称改成了word,内容并没有改变

练习

1、联系人管理系统

实现功能:

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

实现代码:

见绑定资源包

2、网络词典

项目功能总述:

该项目最终实现客户端输入一个英文单词后,命令行中打印其对应的中文意思。

选择UDP的原因:

在网络环境良好时,UDP的传输也比较可靠,并且处理速度比TCP更快。除此之外,因为客户端与服务器之间交互的数据量小,TCP的包头至少20个字节,UDP的包头只有8个字节,使用UDP传输包头占用的资源较小,更节省资源。

项目实现思路:

客户端向服务器发送一个单词信息,服务器接收后,在数据库中查询到该信息,并将中文部分发回到客户端。客户端接收到服务器发来的中文翻译后,将其打印在命令行中。

实现代码:

见绑定资源包

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙进阶-List组件

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来讲讲常用的List组件&#xff0c;也就是列表组件。 List组件 List 组件的基本用法&#xff0c;可以用它来展示列表&#xff0c;并且实现列表滚动&#xff0c;日常开发的时候还可以用它来实现更为复杂的效果。 …

EDA技术简介

目录 可编程逻辑器件 CPLD/FPGA 基于查找表结构的FPGA 硬件描述语言 EDA软件 EDA技术的 应用领域 电子系统的设计方法 EDA (Electronic Design Automation,电子设计自动化) 以可编程逻辑器件 (Programmable Logic Device,简称PLD)为实现载体、以硬件描述语言 (Hardwar…

【java】实战-力扣题库:有序数组的平方

问题描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 问题分析&#xff1a; 既然给定的是一个 非递减顺序的数组 我们可以使用双指针 &#xff0c; 一个指向左边&#xff0c;一个指向…

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

Jupyter Notebook添加kernel的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Python Matplotlib 如何绘制股票或金融数据图

Python Matplotlib 如何绘制股票或金融数据图 在金融领域&#xff0c;数据可视化是分析市场趋势、股票表现和财务健康的重要工具。Python 的 Matplotlib 库为我们提供了强大的功能来绘制股票和金融数据图。本文将详细介绍如何使用 Matplotlib 绘制这些图表&#xff0c;并且结合…

Chrome离线安装包下载

微软的Bing屏蔽了Chrome的搜索结果&#xff0c;需要通过百度搜索。 或者直接访问Chrome的官网&#xff1a;Google Chrome 网络浏览器 直接下载的是在线安装包&#xff0c;安装需要联网。 如果需要在无法联网的设备上安装Chrome&#xff0c;需要在上面的地址后面加上?standalon…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后&#xff0c;就分别得到了对应的lib库&#xff0c;如下图&#xff1a; 再生成Release后如下图&#xff1a;

masm汇编键盘读取字符串换行输出演示

从键盘输入字符串按回车后换行输出 ASSUME CS:CODE, DS:DATA DATA SEGMENT BUFFER DB 20DB ?DB 20 DUP(0) CRLF DB 0AH, 0DH,$ DATA ENDS CODE SEGMENT …

python爬取m3u8视频(思路到实现全讲解!!!)

文章目录 抓取m3u8视频1、思路分析2、实现分析index.m3u8 3、代码实现3.1 获取最后一个m3u8的url地址3.2 多线程下载ts文件与视频合并3.3 合并获取上面俩个代码段的代码 4、注意事项4.1 说明4.2 使用代码进行处理4.3 完整代码 5、解密处理 处理m3u8文件中的url问题 抓取m3u8视频…

html语法

网站是指在因特网上根据一定规则&#xff0c;使用html等制作的用于展示特定内容相关的网页集合 网站由很多网页组成&#xff0c;网页是构成网站的基本元素&#xff0c;通常由图片、连接、视频、声音、文字等元素组成&#xff0c;一般用.htm和.html做后缀&#xff0c;又被称为h…

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

[ DOS 命令基础 3 ] DOS 命令详解-文件操作相关命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮

文章目录 1、案例效果2、文件创建与代码实现1、创建文件2、图标资源文件3、源代码获取1、案例效果 2、文件创建与代码实现 1、创建文件 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 RadarEffactWindow.xaml 。代码功能分两个部分完成,一个是样式,一个是动画。页…

git中使用tag(标签)的方法及重要性

在Git中打标签&#xff08;tag&#xff09;通常用于标记发布版本或其他重要提交。 Git中打标签的步骤&#xff1a; 列出当前所有的标签 git tag创建一个指向特定提交的标签 git tag <tagname> <commit-hash>创建一个带注释的标签&#xff0c;通常用于发布版本 git…

让火患无处遁形,RFID智能应急消防管理来帮忙

我国常受自然灾害侵扰&#xff0c;灾害间的相互影响日益加剧&#xff0c;给灾害救援任务带来了前所未有的挑战。当前&#xff0c;专业救援队伍的实力亟需扩充&#xff0c;现代救援装备的配置亟须加强&#xff0c;保障体系亟待优化&#xff0c;应急预案及联动作战机制亦需深化完…

新视野大学英语读写教程1第四版PDF+答案+听力音频

《新视野大学英语》(第四版) 系列教材包含1—4级&#xff0c; 供两个学年使用。每一级别包含《读写教程》(配教师用书)、《视听说教程》(配教师用书)、《综合训练》和《长篇阅读》。教材提供教学管理平台、数字课程、微课视频、移动学习应用、教学课件、试题库等立体丰富的教学…

华为手机卸载系统应用的方法

摘要&#xff1a; 1.手机环境&#xff1a;手机需要开启开发者模式并使用usb连接电脑&#xff0c;并选择文件传输模式 2.电脑环境&#xff1a;使用鸿蒙工具箱进行傻瓜操作或安装adb工具进行命令卸载 3.鸿蒙工具箱和adb工具本质都是使用adb shell pm uninstall -k --user 0 xx…

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台&#xff0c;优化邮件列表&#xff0c;确保内容优质&#xff0c;进行邮件测试&#xff0c;关注用户反馈调整频率&#xff0c;以保高送达率&#xff0c;提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前&#xff0c;首先需要理解电…

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys ry-cloud报错原因解决 ry-cloud 报错 系统监控→在线用户打开后报错 报错信息如下 class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys原因 type导致&#xff…