【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://www.mzph.cn/news/749463.shtml

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

相关文章

牛客网-SQL大厂面试题-1.各个视频的平均完播率

题目&#xff1a;各个视频的平均完播率 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time dat…

【爬虫介绍】了解爬虫的魅力

爬虫 爬虫&#xff08;Spider&#xff09;是一种自动化程序&#xff0c;通过模拟人的行为&#xff0c;在互联网上收集、抓取和提取信息。爬虫通常用于网站数据抓取、搜索引擎索引、数据分析和挖掘等领域。 爬虫可以自动访问网页&#xff0c;按照预定的规则抓取网页上的文本、…

python-0009-django对数据的增删改

shell 在虚拟环境中&#xff0c;可以使用python manage.py shell&#xff0c;打开命令行。在命令行中&#xff0c;所见即所得&#xff0c;相当于执行代码片段 对象 from django.db import models# Create your models here.class BookInfo(models.Model):name models.CharF…

小车倒立摆系统线性化,离散化处理

一、线性化 从上一篇文章小车倒立摆物理建模与simulink仿真-CSDN博客 我们推导出了倒立摆小车的运动微分方程&#xff1a; 方程里包含了正弦&#xff0c;余弦运算&#xff0c;因此这个系统是非线性的&#xff0c;不容易控制。 我们的控制目标是把倒立摆直立在小车上(角度在0附…

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上&#xff0c;有人大代表建议应尽快发挥5G-A&#xff08;5.5G&#xff09;优势&#xff0c;加快试点城市布局。此前&#xff0c;中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中&#xff0c;4G改变了我们的生活方式&#xff0c;而5…

电感基础篇(一)(建议收藏)

大家好&#xff0c;我是砖一。 今天给大家分享一下电感的基础知识&#xff0c;希望对你有用~ 一&#xff0c;什么是电感 电感就是一根导线和磁性材料。 任意一根导线都是电感&#xff0c;只不过电感量很小&#xff0c;加上磁芯是为了控制电感量的大小&#xff0c;比如说我们…

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

Navicat 在数据库管理中的主要用途有哪些&#xff1f; Navicat 是一款数据库管理工具&#xff0c;其主要用途包括&#xff1a; 1、多数据库支持&#xff1a; Navicat 支持多种数据库连接&#xff0c;包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等&#xff0c;方便用…

安卓UI面试题 51-55

51. 如何解决 Android手机圆角失效问题? 通过 background-clip:padding-box为失效的元素设置样式 52. 简述下面是属于 GLSurFaceView 特性的是 ? A、管理一个 surface,这个 surface 就是一块特殊的内存,能直接排版到 android 的视图view 上。 B、管理一个 EGL display,它…

Python中的增强现实(AR)技术和应用

增强现实&#xff08;AR&#xff09;是一种技术&#xff0c;它允许用户在真实环境中与虚拟物体进行交互。在Python中实现AR应用通常涉及使用专门的AR库和框架&#xff0c;这些库和框架提供了创建和渲染虚拟内容的工具。 一个流行的AR框架是ARKit&#xff08;对于iOS设备&#…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

Java技术栈 —— RBAC权限模型

什么是RBAC&#xff1f;全称为基于角色的访问控制(Role-Based Access Control)&#xff0c;也就是不同角色权限不同。 参考文章或视频链接[1] 【【IT老齐217】简单粗暴讲解RBAC四级角色权限模型】[2] 【【IT老齐217】简单粗暴讲解RBAC四级角色权限模型】

JVM虚拟机:通过jconsole远程连接解决JVM报错

本文重点 前面我们介绍过的一些工具都是使用命令行的方式来帮助我们完成&#xff0c;本文我们将使用一种图形化界面的方式来远程连接&#xff0c;然后完成关于JVM的检测任务。 jconsole jconsole是一个JVM的检测工具&#xff0c;这个工具任何安装了Java的电脑上都有的&#…

70后姐妹上海创业,要IPO了

一种能与消费者高效互动的自动贩卖机&#xff0c;不仅于近日将一家上海公司送到港交所的门前&#xff0c;还让一对70后姐妹的身价超过13亿元。 在殷珏辉和妹妹殷珏莲的带领下&#xff0c;中国营销服务提供商趣致集团坐拥7543台自动贩卖机和超过5000万注册用户。通过为品牌方提…

Apache Paimon系列之:主键表

Apache Paimon系列之&#xff1a;主键表 一、主键表1.Bucket2.LSM Trees3.Compaction 二、数据分布1.固定Bucket2.动态Bucket3.正常动态Bucket模式4.跨分区更新插入动态存储桶模式 三、Merge Engine1.Deduplicate2.部分更新3.序列组4.聚合部分更新5.聚合6.Retract7.First Row 四…

SwiftUI的 特性 - ViewModify

SwiftUI的 特性 - ViewModify 记录一下SwiftUI的 特性 - ViewModify的使用方式 可以通过viewModify来管理视图的样式&#xff0c;结合extension来完成封装达到解偶效果 import SwiftUI/// 我们可以通过viewModify来管理视图的样式&#xff0c;来达到解偶效果 struct DefaultB…

图像分割的定义

图像分割是将数字图像细分为多个图像子区域&#xff08;像素的集合&#xff0c;也被称作超像素&#xff09;的过程。这些子区域的形成是基于灰度、颜色、纹理、形状或其他图像特性的相似性准则。分割的最终目标是简化或改变图像的表示形式&#xff0c;使其成为更容易分析的形式…

Git 命令大全

GIT 命令 ### 新建代码库 ######################## # 在当前目录新建一个Git代码库 git init# 新建一个目录&#xff0c;将其初始化为Git代码库 git init [project-name]# 下载一个项目和它的整个代码历史 git clone [url]### 配置 ############################# # 显示当前…

创建和认识Ruby On Rails控制器

创建和认识Ruby On Rails控制器 我们都知道Ruby On Rails是一个MVC结构的框架。必然他的控制器&#xff0c;视图&#xff0c;数据都是分开的&#xff0c;我们将对他们进行分解&#xff0c;逐个了解他们。首先我们使用命令先创建一个控制器&#xff1a; 注意&#xff1a;控制器名…

【C语言】【时间复杂度】Leetcode 153. 寻找旋转排序数组中的最小值

文章目录 题目时间复杂度概念时间复杂度的计算 解题思路代码呈现 题目 链接: link 时间复杂度 概念 时间复杂度是一种函数&#xff0c;定量地描述了该算法运行的时间。既然是一种函数&#xff0c;就涉及到自变量与因变量。因变量代表是时间复杂的规模&#xff0c;自变量是…

易方达产品亏损仍存,“老鼠仓”阴影犹在,如何突出重围?

近日&#xff0c;易方达基金宣布易方达沪深300 ETF跻身“千亿规模ETF”行列&#xff0c;成为国内“ETF千亿俱乐部”的第三位成员。截至3月8日&#xff0c;该基金的规模增长112.21亿元&#xff0c;涨幅9.45%&#xff0c;规模增量在10亿以上的股票型ETF产品中排名第一。 回望202…