数据库_SQLite3

news2024/11/22 15:31:08

下载

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,能够向数据库中增删改查联系人数据。

实现代码:

见绑定资源包

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

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

相关文章

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日&#xff0c;是一年中的第256天&#xff0c;也是程序员节&#xff0c;同时也是怿星的生日。2014年到2024年&#xff0c;年华似水匆匆一瞥&#xff0c;多少岁月轻描淡写&#xff0c;怿星人欢聚一堂&#xff0c;共同为怿星科技的十周年庆生&#xff01; 01.回忆往昔&…

模拟电路week2

模拟电路学习 三.二极管 1.概念 本征半导体&#xff1a;纯净的半导体 本征半导体的晶体结构示意图&#xff1a; 载流子&#xff1a;在导体或半导体中能够移动并携带电荷的粒子 本征激发&#xff1a;在半导体中&#xff0c;当温度升高时&#xff0c;热能可以使价带中的电子跃…

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就早成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…

【C++篇】跨越有限与无限的边界:STL之set容器中的自我秩序与无限可能

文章目录 C set 容器详解&#xff1a;秩序与高效的数据管理前言第一章&#xff1a;C set 的概念1.1 set 的定义1.2 set 的特点 第二章&#xff1a;set 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法 2.2 相关文档 第三章&#xff1a;set 的常用操作3.1 插入操…

Java求最值 C语言二维数组与指针

1. public static void main(String[] args) {int []arr{11,22,33,44,55,66};int maxarr[0];//arr[0]为索引值 若一开始为0&#xff1b;数组全是负数就会错误for (int i 1; i < arr.length; i) {if (arr[i]>max){maxarr[i];}}System.out.println(max); }//循环开始条件…

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式&#xff08;Circuit Breaker Pattern&#xff09;是云计算和微服务架构中的一种保护性设计模式&#xff0c;其目的是避免系统中的调用链出现故障时&#xff0c;导致系统瘫痪。通过断路器模式&#xff…

PG数据库 jsonb字段 模糊查询

背景&#xff1a; 项目由于多语言的设计&#xff0c;将字段设置成json字段类型&#xff0c;同时存储中文和英文 页面上通过输入框实现模糊的查询 一、表结构&#xff1a;name字段设置jsonb类型 二、表数据 3、Mybatis编写sql select pp.name ->>zh-CN as pmsProductNam…

OpenCV—calcHist()函数

void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,SparseMat& hist, int dims,const int* histSize, const float** ranges,bool uniform true, bool accumulate false ); images 输入的数据指针&#xff0c;要具备相同的尺寸和数…

《Python网络安全项目实战》项目2 Python基础练习

《Python网络安全项目实战》项目2 Python基础练习 项目2 Python基础练习任务2.1 使用数据类型2.1.1 输出2.1.2 输入2.1.3 数字2.1.4 字符串 相关知识 任务评价 任务拓展 任务2.2 使用组合数据类型2.2.1 列表2.2.2 元组2.2.3 集合2.2.4 字典 相关知识 任务评价 任务…

less解决function中return写法在浏览器被识别成Object导致样式失败的问题

问题描述&#xff1a; 一开始写的是: baseFontSize: 37.5px;//基于屏幕尺寸/10得出的基准font-size// return失败,浏览器显示为[object Object],[object Object] .pxToRem(px){value: px / baseFontSize * 1rem;return value; } 使用height: .pxToRem(40px);之后浏览器却是这…

安装中文版 Matlab R2022a

下载安装包 压缩包有点大&#xff0c;大概20G 百度网盘&#xff1a;下载链接 提取码&#xff1a;rmja 安装 解压后打开目录&#xff0c;右键以管理员身份运行 setup.exe 选择输入安装秘钥 输入秘钥&#xff1a; 50874-33247-14209-37962-45495-25133-28159-33348-18070-6088…

Linux云计算 |【第五阶段】CLOUD-DAY9

主要内容&#xff1a; Metrics资源利用率监控、存储卷管理&#xff08;临时卷ConfitMap、EmptyDir、持久卷HostPath、NFS(PV/PVC)&#xff09; 一、Metrics介绍 metrics是一个监控系统资源使用的插件&#xff0c;可以监控Node节点上的CPU、内存的使用率&#xff0c;或Pod对资…

sql数据库数据修改与删除-DML

目录 修改数据 同时修改两个数据 修改表中所有数据 删除数据 删除指定字段的值&#xff08;用UPDATE&#xff09; 删除整张表的数据 举例表如下FIRST表 修改数据 UPDATE 表名 SET 字段名1值1,字段名2值2,...[WHERE 条件]; 将first表name字段张三修改为张三丰。 UPDA…

Oracle视频基础1.3.5练习

Oracle视频基础1.3.4练习 1.3.5 检查数据库启动状态 ps -ef | grep oracle ipcs clear演示alter向前向后改database阶段 sqlplus /nolog conn / as sysdba startup mount alter database nomount # 报错 alter database open启动restricted mode&#xff0c;创建一个connect&…

MySQL数据库迁移到DM8数据库

1. 达梦新建zsaqks库 2. 打开DM数据迁移工具 3. 新建工程 4. 迁移 - 右击 - 新建迁移 下一步 5. 选择迁移方式 6. MySQL数据源 请输入MySQL数据库信息 7. DM数据库目的 请输入达梦数据库信息 8. 迁移选项 保持对象名大小写(勾选) 9. 指定模式 指定是从数据源复制对象。 10.…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Ansible服务 Ansible基本概念 Inventory Playbook Module 配置Ansible 测试Ansible配置 执行Ansible Playbook Ansible模块 文件模块 包管理模块…

爬虫学习2

数据解析 正则表达式 量词&#xff1a; import re#searcch只会匹配到第一次匹配的内容#result re.search(r"\d","今年32")#print(result.group()) #result re.findall(r"\d","我是一个abcdeafg") #print(result)#search只会匹配到第…

初步认识Java,及使用

JAVA 特点 简单性 面向对象 分布式 健壮性 安全性 体系结构中立&#xff08;平台无关&#xff09; 可移植性 解释执行 高性能 多线程 动态 发展史 JDK&#xff0c;Eclipse下载&#xff0c;…

牛客sql题目总结(1)

1.第N高的薪水 AC: create function getnthhighestsalary(n int) returns int begindeclare m int; set m n - 1; return (select distinct salaryfrom employeeorder by salary desclimit m, 1); end 2. 3. 4. 5. 6.

Pr 视频效果:ASC CDL

视频效果/颜色校正/ASC CDL Color Correction/ASC CDL ASC CDL ASC CDL效果通过对红、绿、蓝三个原色通道的独立调整&#xff0c;实现对图像色彩的精确控制。在此基础上&#xff0c;还可用于调整处理后图像的整体饱和度。 ◆ ◆ ◆ 效果选项说明 斜率 Slope、偏移 Offset和功…