【SQLite数据库】的使用

SQLite数据库

文章目录

  • SQLite数据库
    • 0、linux基础知识补充
    • 1、SQLite简介
      • 1.1 SQLite & MySQL 的优缺点比较
      • 1.2 常见的嵌入式数据库
    • 2、数据库的基本命令和用法
      • 2.1 创建数据库
      • 2.2 创建一张表格
      • 2.3 插入一条数据
      • 2.4 增加一列
      • 2.5 删
      • 2.6 改
      • 2.7 查看数据库
    • 3、数据库编程
      • 3.1 实验1:打开/创建数据库C接口
      • 3.2 实验2:创建表的C接口
        • 3.2.1 callback()
        • 3.2.2 sqlite_open()
        • 3.2.3 sqlite_exec()
        • 3.2.4 实验2

0、linux基础知识补充

  • cd -:回到上一成执行目录

  • .configure:是配置的意思

  • >>>.table     -- 查看数据库中的表
    >>>.databases -- 列出当前打开的数据库
    >>>.databases -- 列出当前打开的数据库
    >>>.quit      -- 数据库退出
    

1、SQLite简介

  • 轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂
  • SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为 应用程序的一部分运行。
  • MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。

1.1 SQLite & MySQL 的优缺点比较

SQLite优点SQLite缺点MySQL优点MySQL缺点
1、基于文件,易于使用1、功能欠缺:用户管理、安全功能1、功能多1、复杂一点,需要技术专业知识来识别
2、与SQL类似,微小更改2、不易扩展,不适合大数据库、2、易于扩展适用于大模型2、与传统SQL语法略有不同
3、适合基础开发3、无法定制3、速度块

1.2 常见的嵌入式数据库

在这里插入图片描述

2、数据库的基本命令和用法

2.1 创建数据库

-- 打开方式一
sqlite3     	-- 进入数据库
>>>.open test.db    -- 打开数据库
>>>.quit
-- 数据库退出后在命令当前路径创建数据库test.db-- 打开方式二
sqlite3 test.db -- 在命令运行当前窗口创建数据库test.db
-- 在数据库命令下
>>>.databases   -- 列出当前打开的数据库
>>>.quit        -- 退出
打开方式一
在这里插入图片描述
打开方式二
在这里插入图片描述

2.2 创建一张表格

create table stu2(id Integer,name char,score Integer); -- Integer整数

2.3 插入一条数据

insert into stu values(001,'tp',99);
insert into stu2 values(002,"s",100);       -- ''和""都行
insert into stu(name,score) values("张三",98); -- 插入部分字段内容

2.4 增加一列

alter table stu add column sex char; -- 增加了性别一栏

2.5 删

-- 删除一条数据
delete from stu where id = 002;
-- 删除一张表
drop table stu

2.6 改

update stu set name = 'tp' where id = 000;

2.7 查看数据库

select * from stu;          -- 查询所有字段的结果
select name,score from stu; -- 查询数据库中部分字段的内容

3、数据库编程

3.1 实验1:打开/创建数据库C接口

下面的 C 代码段显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将 返回一个数据库对象。

//opensqlite.c
#include <stdio.h>
#include <sqlite3.h>
int main(char argc, char **argv)
{sqlite3 *db;int ret;if(argc < 2){printf("Usage: %s xxx.db\n",argv[0]);return -1;}//sqlite3_open(const char *filename, sqlite3 **ppDb)//第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件//用于存储指向打开的数据库连接的指针的指针if( (ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){printf("open %s success\n",argv[1]);}else{//const char *sqlite3_errmsg(sqlite3*);//sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.printf("error:%s,%d",sqlite3_errmsg(db),ret);if(ret = SQLITE_PERM){printf("permission no\n");}return -1;}//sqlite3_close(sqlite3*)//该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。//如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。sqlite3_close(db);printf("done\n");return 0;
}
实验1 打开/创建数据库C接口 结果
在这里插入图片描述

3.2 实验2:创建表的C接口

  • 下面的 C 代码段将用于在先前创建的数据库中创建一个表:

  • 几个API

3.2.1 callback()
  • callback(void *arg, int column_size, char *column_value[], char *column_name[])//void *arg:是sqlite3_exec函数的第四个参数//colunm_size 表示数据库的数据库中的字段(Field),每个字段对应表中的一个列,一个表有几列就是几;//column_value[]:列的值//column_name:字段名字
    
3.2.2 sqlite_open()
  • sqlite3_open(const char *filename, sqlite3 **ppDb)//第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件//用于存储指向打开的数据库连接的指针的指针
    
3.2.3 sqlite_exec()
  • sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)//第二个参数sql:要执行的 SQL 查询语句,可以包含单个或多个 SQL 语句,每条语句以分号结束。//第三个参数是一个回调函数callback,用于处理查询结果的每一行数据;//第四个参数data作为回调函数callback的第一个参数 void *arg; //第五个参数errmsg将被返回用来获取程序生成的任何错误。//int callback(void *arg, int column_size, char *column_value[], char*column_name[])//sqlite3_exec返回值为 0 时,表示操作成功完成
    
3.2.4 实验2
//creatSqlite.c
#include <stdio.h>
#include <sqlite3.h>
// int callback(void *arg, int column_size, char *column_value[], char*column_name[])int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{printf("arg = %s\n",(char *)arg);//void *arg:是sqlite3_exec函数的第四个参数//colunm_size 表示数据库的数据库中的字段(Field),每个字段对应表中的一个列,一个表有几列就是几;//column_value[]:列的值//column_name:字段名字for(int i = 0; i<column_size; i++){printf("%s = %s\n",column_name[i],column_value[i]);}printf("======================================\n");return 0;//必须返回0,这样数据库中有多少条数据,这个回调函数就会被调用多少次
}
int main(char argc, char **argv)
{sqlite3 *db;char *errorMes = NULL;int ret;if(argc < 2){printf("Usage: %s xxx.db\n",argv[0]);return -1;}//sqlite3_open(const char *filename, sqlite3 **ppDb)//第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件//用于存储指向打开的数据库连接的指针的指针if( (ret = sqlite3_open(argv[1],&db))==SQLITE_OK){printf("open %s success\n",argv[1]);}else{//const char *sqlite3_errmsg(sqlite3*);//sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.printf("error:%s,%d",sqlite3_errmsg(db),ret);if(ret = SQLITE_PERM){printf("permission no\n");}return -1;}// sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)//第二个参数sql:要执行的 SQL 查询语句,可以包含单个或多个 SQL 语句,每条语句以分号结束。//第三个参数是一个回调函数callback,用于处理查询结果的每一行数据;//第四个参数data作为回调函数callback的第一个参数 void *arg; //第五个参数errmsg将被返回用来获取程序生成的任何错误。//int callback(void *arg, int column_size, char *column_value[], char*column_name[])//sqlite3_exec返回值为 0 时,表示操作成功完成ret = sqlite3_exec(db,"create table Class03(id Integer,name char,score Integer);",\callback,"content of sql:",&errorMes); //errorMes may sigment errorif(ret != SQLITE_OK)//SQLITE_OK 是 SQLite 中的一个宏定义,表示操作成功完成的返回代码。//在 SQLite 中,每个操作都会返回一个特定的返回代码,用于指示操作的结果。//SQLITE_OK 代表操作成功完成,没有发生错误。{printf("creat tables error:%s\n",errorMes);//如果已经创建,会有errorMes提示}printf("go ahead\n");ret = sqlite3_exec(db,"insert into Class03 values(002,'kkkk',99);",\callback,"content of sql:",&errorMes); //errorMes may sigment errorprintf("insert:%d,%s\n",ret,errorMes);//会有errorMes提示ret = sqlite3_exec(db,"select * from Class03;",\callback,"content of sql:",&errorMes); //errorMes may sigment errorprintf("select:%d,%s\n",ret,errorMes);//会有errorMes提示//sqlite3_close(sqlite3*)sqlite3_close(db);//该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。//如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。printf("done\n");return 0;
}
  • 相当于执行了
sqlite3 test2.db
>>>create table Class03(id Integer,name char,score Integer);
>>>insert into Class03 values(002,'kkkk',99);
>>>select * from Class03;

可以通过修改sqlite3_exec()函数中第二个参数,在sqlite3 里面运行不同数据库指令

  • 实验2结果

在这里插入图片描述



欢迎大家一起交流讨论!

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

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

相关文章

使用git命令行文件路径全是数字问题

目录 第一章、问题分析1.1&#xff09;报错提示 第二章、解决方式2.1&#xff09;修改设置 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、问题分析 1.1&#xff09;报错提示 使用git命令行提交的时…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简称 SPA&#xff0c;顾 名思义&#xff0c;指的是一个 Web 网站中只有唯一的一个 HTML 页面&#xff0c;所有的 功能与交互都在这唯一的一个页面内完…

[c++] std::future, std::promise, std::packaged_task, std::async

std::promise 进程间通信&#xff0c;std::packaged_task 任务封装&#xff0c;std::async 任务异步执行&#xff1b;std::future 获取结果。 1 std::promise 1.1 线程间同步 std::promise 可以用于线程间通信。 如下代码是 std::promise 中的示例代码。 std::promise - cp…

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

mysql颗粒归仓

B B树&#xff1a;节点排序 一个节点存多个元素 多个元素也排序了 叶子节点间有指针&#xff0c;非叶子节点上的元素在叶子节点冗余&#xff1a;叶子节点存储排好序的all元素 通过数据排序提高查询速度&#xff0c;节点存储多个元素 高度不会太高&#xff0c;一个innodb页B树…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

#QT(MainWindow初尝---文本编辑器)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;使用MainWindow做一个文本编辑器 3.记录 &#xff08;1&#xff09;创建几个功能 &#xff08;2&#xff09;为几个功能写实现&#xff0c;这里不能使用转到槽&#xff0c;需要自己用connect函数关联。这里的功能是QAction类&am…

MySQL初阶2——索引的初步理解

目录 一、索引的概念和使用 1. 索引是什么 2. 索引的使用 2.1 查看索引 2.2 创建索引 2.3 删除索引 3. 索引使用的注意事项 二、索引的核心内容——底层的数据结构 1. 前景引入 2. 索引使用的数据结构 2.1 基础版—— B 树 2.2 升级版—— B 树 重点&#xff1a;如…

StarRocks面试题及答案整理,最新面试题

StarRocks 的 MV&#xff08;物化视图&#xff09;机制是如何工作的&#xff1f; StarRocks 的物化视图&#xff08;MV&#xff09;机制通过预先计算和存储数据的聚合结果或者转换结果来提高查询性能。其工作原理如下&#xff1a; 1、数据预处理&#xff1a; 在创建物化视图时…

【计算机视觉】二、图像形成——实验:2D变换编辑(Pygame)

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)2D变换编辑器0. 程序简介环境说明程序流程 1. 各种变换平移变换旋转变换等比缩放变换缩放变换镜像变换剪切变换 2. 按钮按钮类创建按钮 3. Pygam…

[第二章]二分与前缀和

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

谷歌Gemma大模型本地部署以及线上访问流程

1.谷歌开发出强大的 AI 模型 Gemma&#xff0c;该模型可以在笔记本电脑和台式机上运行&#xff0c;这真是太棒了&#xff01;开源的 Gemma 模型将使研究人员和开发人员能够更轻松地访问和利用其功能&#xff0c;从而为人工智能领域带来更多创新。【【【【本地安装】】】 下载安…

设计模式在芯片验证中的应用——装饰器

一、装饰器模式 装饰器模式(Decorator)是一种结构化软件设计模式&#xff0c;它提供了一种通过向类对象添加行为来修改类对象的方法&#xff0c;而不会影响同一类的其它对象行为。该模式允许在不修改抽象类的情况下添加类功能。它从本质上允许基类代码对不可预见的修改具有前瞻…

算法导论第十章练习参考答案(18) - 10.1-10.4

Exercise 10.1-1 Exercise 10.1-2 我们将栈命名为T和R。首先&#xff0c;设置T.top 0和R.top n 1。实际上&#xff0c;栈T使用数组的第一部分&#xff0c;栈R使用数组的最后一部分。在栈T中&#xff0c;top是T中最右边的元素。在栈R中&#xff0c;top是R中最左边的元素。 E…

超越 GPT4,科大讯飞,再出王炸!

哈喽&#xff0c;大家好&#xff01; 去年&#xff0c;科大讯飞星火大模型上线&#xff0c;给大家推荐了一波&#xff0c;演示了其强大的功能&#xff0c;不少小伙伴都立马申请体验了一把&#xff0c;也有私信说非常强大&#xff0c;工作效率提高不少&#xff0c;支持国产大模…

Java代码基础算法练习-判断字符串是否为回文-2024.03.16

任务描述&#xff1a; 回文串是指一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等。要求输入 一个字符串&#xff0c;判断此字符串是否为回文。&#xff08;注&#xff1a;设字符串长度小于20&#xff09; 任务要求&#xff1a; package suanfa;import…

一文全面了解向量数据库

1. 什么是向量数据库&#xff1f;** 首先&#xff0c;我们需要理解什么是向量&#xff1f; 向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点&#xff0c;例如一个词或一张图片&#xff0c;由描述其许多特性的值的集合组成。这些变量有时被称为“…

3.2_5 内存映射文件

文章目录 3.2_5 内存映射文件&#xff08;一&#xff09;传统的文件访问方式&#xff08;二&#xff09;内存映射文件&#xff08;Memory-Mapped Files&#xff09; 总结 3.2_5 内存映射文件 &#xff08;一&#xff09;传统的文件访问方式 磁盘的存储是以块为单位的&#xff0…

2024年腾讯云4核8G12M服务器可容纳多大访问量?

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;646元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

【JVM】GCRoot

GC root原理 通过对枚举GCroot对象做引用可达性分析&#xff0c;即从GC root对象开始&#xff0c;向下搜索&#xff0c;形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用&#xff0c;没有形成引用链&#xff0c;那么该对象等待GC回收。 可以作为GC Roots的对…