嵌入式数据库之sqlite3

news2025/2/3 23:40:48

一、数据库基本概念

        数据:能够输入计算机并能被计算机程序识别和处理的信息集合。

        数据库:数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合。

二、常用的数据库

1.大型数据库

        Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。

        IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。

2.中型数据库

        Server是微软开发的数据库产品,主要支持windows平台。

3.小型数据库

        mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,2008年被Sun公司收购,开放源码。

三、基于嵌入式的数据库

基于嵌入式Linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB

Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等

SQLite关系型数据库,体积小,支持ACID事务

Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中

eXtremeDB是内存数据库,运行效率高

四、SQLite基础

1.SQLite的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。 他是一个轻量级的嵌入式数据库。

2.SQLite有以下特性:

        (1)零配置一无需安装和管理配置;

        (2)储存在单一磁盘文件中的一个完整的数据库;

        (3)数据库文件可以在不同字节顺序的机器间自由共享;

        (4)支持数据库大小至2TB;

        (5)足够小,全部源码大致3万行c代码,250KB;

        (6)比目前流行的大多数数据库对数据的操作要快;

五、创建数据库

1.手工创建

―使用SQLite3工具,通过手工输入SQL命令行完成数据库创建.

―用户在Linux的命令行界面中输入SQLite3可启动SQLite3工具

2.代码创建

―在代码中常动态创建数据库

―在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库

3.数据库的安装

本地安装:sudo dpkg -i  *.deb

在线安装:sudo qpt-get install-sqlite3

六、SQLite常用命令介绍

1.在终端下运行sqlite3   <*.db>,出现如下提示符

―SQLite  version  3.7.2

―Enter “.help” for instructions

―Enter SQL statements terminated with a “;”

―sqlite>

<*.db> 是要打开的数据库文件。若该文件不存在,则自动创建

2.显示所有命令:sqlite> .help

3.退出sqlite3:sqlite>.quit

4.显示当前打开的数据库文件:sqlite>.database

5.显示数据库中所有表名:sqlite>.tables

6.查看表的结构:―sqlite>.schema  <table_name>

/*******************************************/

7.以下为SQL命令,每个命令以;结束

(1)创建新表―sqlite>create  table  <table_name>  (f1  type1, f2  type2,…);

        create table stuinfo(id integer, name text, age integer, score float);//创建表格

(2)删除表―sqlite>drop  table  <table_name>

        drop table stuinfo;

(3)查询表中所有记录―sqlite>select  *  from  <table_name>;

        select  *  from  stu;//查询所有字段

(4)按指定条件查询表中记录―sqlite>select  *  from  <table_name>  where  <expression>;

        select * from stuinfo;//查询所有字段
        select * from stuinfo where score = 80;
        select * from stuinfo where score = 80 and name= 'zhangsan';
        select * from stuinfo where score = 80 or name='wangwu';
        select name,score from stuinfo;  查询指定的字段
        select * from stuinfo where score >= 85 and score < 90;

(5)向表中添加新记录―sqlite>insert  into  <table_name>  values (value1, value2,…);

        insert into stuinfo values(1001, 'zhangsan', 18, 80);

        insert into stuinfo (id, name, score) values(1002, 'lisi', 90);

(6)按指定条件删除表中记录―sqlite>delete  from  <table_name>  where  <expression>

        delete from stuinfo where id=1003 and name='zhangsan';

(7)更新表中记录

―sqlite>update  <table_name>  set  <f1=value1>, <f2=value2>…   where  <expression>; 

        update stuinfo set age=20 where id=1003;//设置一个字段的更新
        update stuinfo set age=30, score = 82 where id=1003;//设置两个字段的更新

(8)在表中添加字段―sqlite>alter table <table> add column <field> <type> default  …;

        alter table stuinfo add column sex char;

(9)在表中删除字段(删除一列)

        Sqlite中不允许删除字段,可以通过下面步骤达到同样的效果

        sqlite> create table stu1 as select id, name, score from stu//创建一张新的表

        sqlite> drop table stu//删除原有的表

        sqlite> alter table stu1 rename to stu//讲新的表名字改成原有旧表的名字

数据库设置主键:
     create table info(id integer primary key autoincrement, name vchar);

(10)创建带约束数据表
创建表格的时候设置字段约束

PRIMARY KEY主键,NOT NULL不能为NULL,UNIQUE唯一,DEFAULT默认值,ID INTEGER PRIMARY KEY AUTOINCREMENT id自动增长

以此表格为例:

(1)创建数据表
create  table  device  (id  integer primary key autoincrement,
                                         name  varchar(256) unique ,
                                         status int not NULL default 0,
                                         online int not NULL);

创建时加入条件(表不存在是创建)

create table if not exists device(id integer primary key autoincrement, 
                                                  name varchar(256) unique, 
                                                  status int default 0, 
                                                  online int not NULL);

insert into stu(name, online) values('led6', 0);可以实现部分赋值,id值自增

七、SQLite编程接口

1. int   sqlite3_open(char  *path,   sqlite3 **db);

        ―功能:打开sqlite数据库

        ―path:数据库文件路径、

        ―db:指向sqlite句柄的指针、

        ―返回值:成功返回0,失败返回错误码(非零值)

2. int   sqlite3_close(sqlite3 *db);

        ―功能:关闭sqlite数据库        

        ―返回值:成功返回0,失败返回错误码

3. const  char  *sqlite3_errmg(sqlite3 *db);        

        ―返回值:返回错误信息

4. Typedef  int (*sqlite3_callback)(void *, int,char **, char **);

5. Int sqlite3_exec(sqlite3 *db, const  char  *sql, sqlite3_callback callback, void *, char **errmsg);

        ―功能:执行SQL操作

        ―db:数据库句柄

        ―sql:SQL语句

        ―callback:回调函数

        ―errmsg:错误信息指针的地址

        ―返回值:成功返回0,失败返回错误码

6. typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);

        ―功能:每找到一条记录自动执行一次回调函数

        ―para:传递给回调函数的参数

        ―f_num:记录中包含的字段数目

        ―f_value:包含每个字段值的指针数组

        ―f_name:包含每个字段名称的指针数组

        ―返回值:成功返回0,失败返回-1

7.不使用回调函数执行SQL语句

int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);

        ―功能:执行SQL操作

        ―db:数据库句柄

        ―sql:SQL语句

        ―resultp:用来指向sql执行结果的指针

        ―nrow:满足条件的记录的数目

        ―ncolumn:每条记录包含的字段数目

        ―errmsg:错误信息指针的地址、

        ―返回值:成功返回0,失败返回错误码

8.void sqlite3_free_table(char **result);//查询

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

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

相关文章

架构设计之分析系统性能问题

我们在讨论高性能架构之前&#xff0c;需要先聊聊什么叫高性能&#xff0c;以及如何量化地测试系统的性能。在02 讲中&#xff0c;我们讨论了一些和并发相关的指标。事实上&#xff0c;并发数正是系统性能的核心指标之一&#xff0c;因为高并发会引起系统资源短缺&#xff0c;来…

【夜深人静学数据结构与算法 | 第二篇】后缀(逆波兰)表达式

目录 前言&#xff1a; 中缀表达式&#xff1a; 后缀表达式&#xff1a; 中缀表达式转后缀表达式&#xff1a; 后缀表达式计算结果&#xff1a; 总结&#xff1a; 前言&#xff1a; 计算机在计算四则运算的时候&#xff0c;由于括号以及运算优先级的存在&#xff0c;并不…

大数据Doris(四十一):Routine Load严格模式和导入案例

文章目录 Routine Load严格模式和导入案例 一、严格模式 二、严格模式导入Kafka数据到Doris Routine Load严格模式和导入案例

【Thunder送书 | 第三期 】「Python系列丛书」

文章目录 前言《Python高效编程——基于Rust语言》《Python从入门到精通》《Python Web深度学习》《Python分布式机器学习》文末福利 | 赠书活动 前言 Thunder送书第三期开始啦&#xff01;前面两期都是以【文末送书】的形式开展&#xff0c;本期将赠送Python系列丛书&#xff…

下载安装Visual Studio 2017 Community 来编译NIM_PC_DEMO

1、下载vs2017的引导程序 官方并没有为vs2017提供离线安装包&#xff0c;所以我们选择在线安装。 首先我们下载vs2017的引导程序&#xff1a;Visual Studio 2017安装包 包含如下4个文件&#xff1a; vs_Community.exe&#xff1a; 社区版&#xff0c;免费。但是需要登录微软…

第四节 字符串

文章目录 字符串1.1 字符串介绍1.2 字符串的定义1.3 字符串的输入和输出1.3.1 字符串的索引 1.4 字符串切片1.4.1 切片几种写法 1.5 字符串常用函数1.5.1 find()1.5.2 index()1.5.3 扩展知识: rfind()和rindex()1.5.4 count()1.5.5 replace()1.5.6 split()1.5.7 join() 1.6 字符…

C++常用STL容器--list

C常用STL容器--list list基本概念list构造函数list赋值、交换list大小操作list插入、删除list数据获取list反转、排序 list基本概念 功能&#xff1a; 将数据进行链式存储 链表(list) 是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针…

高并发架构设计方法

我们知道&#xff0c;“高并发”是现在系统架构设计的核心关键词。一个架构师如果设计、开发的系统不支持高并发&#xff0c;那简直不好意思跟同行讨论。但事实上&#xff0c;在架构设计领域&#xff0c;高并发的历史非常短暂&#xff0c;这一架构特性是随着互联网&#xff0c;…

Linux之配置网络

目录 Linux之配置网络 网络接口 网络类型符号 类型 设备类型或位置选择 类型 网络连接 网络配置 三种方法 方法1 --- 使用nmtui进行网路配置 方法2 --- 使用nmcli设置 方法3 --- 修改配置文件 方法4 --- cockpit配置示意图 使用ip命令配置临时生效的网络连接 测试网…

chatgpt赋能python:Python收集数据的介绍

Python收集数据的介绍 Python是一个多功能的编程语言&#xff0c;其拥有强大的数据收集和分析功能。为了充分利用Python的数据处理和挖掘功能&#xff0c;一些优秀的数据收集工具被开发出来。在本文中&#xff0c;我们将介绍如何使用Python收集数据&#xff0c;并介绍一些常用…

总结900

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.读六级阅读 2.完成学习通考试(没做计划) 3.阅…

[编程工具]Unity配表导出工具TableExporter1.1

[ 目录 ] 0. 前言1. 属性拓展优化&#xff08;1&#xff09;反射获取转化函数 TryParse&#xff08;2&#xff09;反射获取EmptyReplace&#xff08;3&#xff09;属性类型&#xff08;4&#xff09;属性拓展 2. 模板处理&#xff08;1&#xff09;替换内容&#xff08;2&#…

chatgpt赋能python:Python如何放大界面——实用技巧

Python如何放大界面——实用技巧 在Python中&#xff0c;很多时候我们需要放大界面来更清楚的展示内容。这篇文章将介绍Python放大界面的方法。 放大界面的原理 在Python中&#xff0c;放大界面的原理实际上就是改变窗口的大小。我们可以通过改变窗口的尺寸实现放大效果。 …

LuatOS-Air AT应用指南--RNDIS

简介 RNDIS是指Remote NDIS&#xff0c;基于USB实现RNDIS实际上就是TCP/IP over USB&#xff0c;就是在USB设备上跑TCP/IP&#xff0c;让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。 Window系统 window系统支持RNDIS直接用usb连接就可以使用&a…

2023/6/14总结

JS的学习&#xff1a; JavaScript是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互的效果 主要作用&#xff1a; 网页特效表单验证数据交互 JS的组成 ECMAScript 规定了js基础的语法核心知识 Web APIs DOM:操作文档&#xff0c;对页面…

简单的TCP网络程序·线程池(后端服务器)

目录 版本四&#xff1a;线程池 注意事项 文件&#xff1a;Task.hpp -- 任务单独为一个文件 组件&#xff1a;日志修改 新函数&#xff1a;vprintf() 可变参数的提取逻辑 vfprintf()的工作原理 初始化一个va_list 日志准备 获取时间小知识 日志初版 日志启动测试 …

DAY23:二叉树(十三)二叉树的最近公共祖先+二叉搜索树的最近公共祖先

文章目录 236.二叉树的最近公共祖先思路完整版后序遍历的进一步理解为什么左为空右不为空的时候return right这个逻辑是否包含p/q本身就是公共祖先的情况 235.二叉搜索树的最近公共祖先思路关于遍历顺序 递归法最开始的写法debug测试修改版 迭代法最开始的写法为什么最开始这种…

chatgpt赋能python:Python收费介绍

Python收费介绍 什么是Python? Python是一种高级的、解释性、面向对象、纯粹的动态语言&#xff0c;多用于快速应用程序开发、脚本编写、系统管理任务等。它有一个简单直观优美的语法&#xff0c;非常容易学习。 Python的收费形式 Python语言本身是免费的&#xff0c;任何…

chatgpt赋能python:Python如何操作Word文档

Python如何操作Word文档 简介 Python是一种高级编程语言&#xff0c;具有易于学习和使用、高效、可移植性强等优点。相信许多Python开发者都遇到过需要使用Python操作Word文档的情况。本文旨在介绍如何使用Python操作Word文档&#xff0c;使开发者能够方便地实现自己的需求。…

chatgpt赋能python:Python怎么改为中文?

Python怎么改为中文&#xff1f; Python是一种高级编程语言&#xff0c;具有易读性、简单性和可扩展性的特点。它广泛应用于Web开发、数据分析、人工智能等领域。如何将Python改为中文&#xff1f;下面将为您详细介绍。 为什么要将Python改为中文&#xff1f; Python的英文是由…