Linux嵌入式数据库

article/2025/11/4 8:13:46

文章目录

  • 一、SQLite简介
  • 二、SQLite数据库安装
  • 三、SQLite的命令用法
    • 3.1 创建一个数据库
    • 3.2 创建一张表格
    • 3.3 向创建的表格中插入数据
    • 3.4 查看数据库的记录
    • 3.5 其他常用语句
  • 四、SQLite的编程操作
    • 4.1 打开/创建数据库的C接口
    • 4.2 创建表的C接口

一、SQLite简介

SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。特点:轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据库用于管理多端设备,更加复杂。
MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。
在这里插入图片描述
基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDB
Firebird 是关系型数据库,功能强大,支持存储过程,SQL兼容等
SQLite 关系型数据库,体积小,支持ACID事务
Berkeley DB 并没有数据库服务器的概念,他的程序直接链接到应用程序中
eXtremeDB 是内存数据库,运行效率高

二、SQLite数据库安装

2.1
访问 https://www.sqlite.org/download.html
2.2 在这里插入图片描述
2.3 安装步骤

  1. 把下载的文件sqlite-autoconf-3390000.tar.gz上传到开发板
  2. tar xvf sqlite-autoconf-3390000.tar.gz 解压
  3. cd sqlite-autoconf-3390000 进入文件夹
  4. ./configure --prefix=/usr/local 配置安装路径在/usr/local
  5. make 编译
  6. sudo make install 安装

键入 sqlite3 打开数据库
在这里插入图片描述

三、SQLite的命令用法

3.1 创建一个数据库

(1) sqlite3 进入数据库 
(2)  .open test.db
(3) .quit 数据库退出后在命令当前路径创建数据库test.db
(4).databases 列出当前打开的数据库

在这里插入图片描述

3.2 创建一张表格

create table stu(id Integer,name char,score Integer);

3.3 向创建的表格中插入数据

insert into stu values(1,'huang',99); 
insert into stu values(2,"gang",100); ''""都行 
insert into stu(name,score) values("huanggang",98); 插入部分字段内容

在这里插入图片描述

3.4 查看数据库的记录

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

在这里插入图片描述

3.5 其他常用语句

(1)删除一条记录

delete from stu where id = 1;

(2)更改一条记录

update stu set name = 'huangg' where id = 2;

(3)删除一张表

drop table stu;

(4)增加一列

alter table stu add column sex char;

四、SQLite的编程操作

4.1 打开/创建数据库的C接口

需要引入的头文件

#include <sqlite3.h>

4.1.1打开数据库函数介绍

sqlite3_open(const char *filename, sqlite3 **ppDb) //该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 
sqlite3_close(sqlite3*)// 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。 
const char *sqlite3_errmsg(sqlite3*); 返回错误信息
int sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码

sqlite3_open 返回值
在这里插入图片描述
4.1.2 示例代码

#include <stdio.h>
#include <sqlite3.h>
int main(char argc,char **argv)
{sqlite3 *db;int ret;if(argc < 2){printf("Please input %s xxx.db\n",argv[0]);return -1;}if(ret = sqlite3_open(argv[1],&db)==SQLITE_OK){printf("open %s ok\n",argv[1]);}else{printf("the wrong num is %d\n",ret);if(ret == 14){printf("Permission deny\n");}}sqlite3_close(db);printf("done\n");return 0;
}

运行结果:
在这里插入图片描述

4.2 创建表的C接口

4.2.1 执行SQL语句的函数及其回调函数
(1)sqlite3_exec函数

sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
  • 函数说明:
    该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。
  • 参数说明:
    第一个参数 :sqlite3 是打开的数据库对象
    第二个参数:sql 需要执行的sql语句
    第三个参数:sqlite_callback 是一个回调函数用来显示SQL语句后的输出结果
    第四个参数:data 作为回调函数的第一 个参数
    第五个参数:errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。
    (2)callback函数(回调函数)
int callback(void *arg, int column_size, char *column_value[], char *column_name[])```

参数说明:
void *arg:是sqlite3_exec函数的第四个参数
column_size:数据库的字段数
column_value[]:列的值
column_name:字段名字

4.2.2 示例代码
(1)SELECT 操作

#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{int i;for(i=0;i<column_size;i++){printf("%s = %s\n",column_name[i],column_value[i]);}printf("===============================\n");return 0;}
int main(char argc,char **argv)
{sqlite3 *db;int ret;char *errmsg;char *sql;if(argc < 2){printf("Please input %s xxx.db\n",argv[0]);return -1;}if(ret = sqlite3_open(argv[1],&db)==SQLITE_OK){printf("open %s ok\n",argv[1]);}else{printf("the wrong num is %d\n",ret);if(ret == 14){printf("Permission deny\n");}}//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)ret = sqlite3_exec(db, "create table stu1(id Integer,name char,score Integer);",\callback, "context of sql", &errmsg);if(ret == SQLITE_OK){printf("create successfully\n");}else{printf("create faily the reasons :%s\n",errmsg);}sql = "insert into stu1 values(1,'zhang heng',89);"\"insert into stu1 values(2,'wang er',91);"\"insert into stu1 values(3,'li si',99);";ret = sqlite3_exec(db,sql,callback, "context of sql", &errmsg);if(ret == SQLITE_OK ){printf("insert ok\n");}else{printf("insert error ,the reason is %s\n",errmsg);}ret = sqlite3_exec(db,"select * from stu1;",callback, "context of sql", &errmsg);sqlite3_close(db);return 0;
}

在这里插入图片描述
运行结果:
在这里插入图片描述
(2)UPDATE

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName){int i;fprintf(stderr, "%s: ", (const char*)data);//stderr – 标准错误输出设备 stderr是无缓冲的,会直接输出。for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[]) {sqlite3 *db;char *zErrMsg = 0;int rc; char *sql;const char* data = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "UPDATE stu1 set score = 100 where id=1212;"\"SELECT * from stu1";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0;
}

在这里插入图片描述

(4) DELETE操作

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName){int i;fprintf(stdout, "%s: ", (const char*)data);for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}
int main(int argc, char* argv[]) {sqlite3 *db;char *zErrMsg = 0;int rc; char *sql;const char* data = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "DELETE from stu1 where id = 2;"\"SELECT * from stu1;";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0;}

在这里插入图片描述
5.SQLite小练习,与链表的相互转化

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
struct class{int id;char name[32];int score;struct class* next;};void MyStrcpy(char dstStr[],char srcStr[])
{int i=0;                              //数组下标初始化为0 while(srcStr[i]!='\0')                //若取出字符不是字符串的结束标志 {dstStr[i]=srcStr[i];             //复制字符 i++;                             //移动下标 }dstStr[i]='\0';                     //在字符串dstStr的末尾添加字符串结束标志 
}void printLink(struct class*point)
{struct class*p = point;while(p->next!=NULL){p = p->next;printf("stu->id  = %d\n",p->id);printf("stu->name  = %s\n",p->name);printf("stu->score  = %d\n",p->score);}}
/*头插法
*/
struct class* sqlTolink(struct class* head,struct class*stu)
{stu->next = head->next;head->next = stu;return head;}int callback(void *head, int column_size, char *column_value[], char *column_name[])
{int i ,size;size = column_size;static char *name;struct class* stu;char *values[3];head = (struct class*)head;stu =(struct class*)malloc(sizeof(struct class));for(i = 0;i<column_size;i++){values[i] = column_value[i];printf("%s = %s\n",column_name[i],column_value[i]);}//将数据库中的数据做处理,并加入链表中stu->id = atoi(values[0]);name = values[1];MyStrcpy(stu->name,name);//这里同字符数组存储字符串。stu->score = atoi(values[2]);head = sqlTolink(head,stu);return 0;}
//将链表存放的数据放入数据库中
int linkTosql(struct class s,sqlite3* sqldb)
{int ret;char sql[128];char *errmsg;printf("in linkToqsl\n");printf("s.name = %s\n",s.name);sprintf(sql, "insert into stu1 values(%d,'%s',%d);",s.id,s.name,s.score);printf("after sprintf sql = %s\n",sql);ret = sqlite3_exec(sqldb,sql,callback, NULL, &errmsg);printf("after sqlite3_exec\n");return ret;}
int main(char argc,char **argv)
{sqlite3 *db;int ret;char *errmsg;char *sql;struct class *head;head =(struct class*)malloc(sizeof(struct class));head ->next = NULL;struct class new;new.id = 4;MyStrcpy(new.name,"huangliu");new.score = 100;printf("the new.name = %s\n",new.name);if(argc < 2){printf("Please input %s xxx.db\n",argv[0]);return -1;}if(ret = sqlite3_open(argv[1],&db)==SQLITE_OK){printf("open %s ok\n",argv[0]);}else{printf("the wrong num is %d\n",ret);if(ret == 14){printf("Permission deny\n");}}ret = linkTosql(new,db);ret = sqlite3_exec(db,"select * from stu1;",callback,(void*)head, &errmsg);printf("======================================================================================\n");sqlite3_close(db);printLink(head);return 0;
}

http://chatgpt.dhexx.cn/article/VedX2TgM.shtml

相关文章

linux中的数据库

目录 1.安装MySQL 2.创建数据库 3.删除数据库 4.查询创建数据库的语句 5使用数据库的语句 6.查询当前默认的数据库 7.查询使用的编码方式和校验规则 8.创建表的语句 9.表的物理存储结构 10.表的数据类型 11.总结 引言&#xff1a; 数据库是现代应用开发中不可或缺的组…

linux启动数据库

1、查看mysql版本   1&#xff09;status;   2&#xff09;select version(); 2、Mysql启动 1&#xff09;使用 service 启动&#xff1a;   service mysqld start (5.0版本是mysqld)   service mysql start (5.5.7版本是mysql) 2&#xff09;使用 mysqld 脚本启动…

linux之数据库

一.数据库的基本概念 1.定义&#xff1a; 数据库就是一种按数据结构来组织&#xff0c;存储和管理数据的仓库&#xff0c;其中包含数据挖掘&#xff0c;大数据信息的推送 2.数据库的种类 sqlserver-----微软公司 mysql---------sun公司 oracle--------oracle db2------------i…

【Linux-MYSQL】数据库的使用

目录 1.数据库介绍 &#x1f308;1.1数据库的分类 &#x1f308;1.2存储引擎 2.数据库的操作 &#x1f308;2.1创建数据库 ​编辑&#x1f47f; 1.查show databases; &#x1f47f;2删除 drop database库名 &#x1f47f;3.创建 create 查看创建数据库的详细信息 &…

Linux系统中安装数据库

1.在linux系统的root目录中创建一个temp目录 mkdir temp2.将MySQL安装包传输到Linux系统中temp目录下 3.解压压缩包&#xff0c;将解压后的文件移动到/usr/local&#xff0c;同时命名为mysql 解压&#xff1a;[rootlocalhost temp]# tar zxvf mysql-5.7.27-linux-glibc2.12-x…

数据库的概念?怎么在linux内安装数据库?怎么使用?

目录 一、概念 二、mysql安装及设置 1.安装mysql 2.数据库服务启动停止 三、数据库基本操作 1、数据库的登录及退出 2、数据表的操作 3、mysql查询操作 一、概念 数据库:是存放数据的仓库&#xff0c;它是一个按数据结构来存储和管理数据的计算机软件系统。数据库管理…

Linux下常用数据库介绍

一、数据库介绍 1.什么是数据库&#xff1b; 数据库就是一个存放计算机数据的仓库&#xff0c;这个仓库是按照一定的数据结构&#xff08;数据结构是指数据的组 织形式或数据之间的联系&#xff09;来对数据进行组织和存储的&#xff0c;可以通过数据库提供的多种方法来管理其…

Linux下访问数据库

Linux下访问数据库 声明&#xff1a;本文只简单描述Linux系统下访问mysql数据库的步骤&#xff0c;关于连接上数据库之后的简单的对于数据库的增删改查等操作只是稍微提及&#xff0c;关于增删改查的语句书写&#xff0c;本文不再讲述。 一般来说&#xff0c;访问数据库有如下几…

Linux_MySQL数据库基础

文章目录 1.基本使用连接MySQL服务器创建与删除数据库创建删除数据库表查看数据库表结构&#xff0c;向数据库表中插入&#xff0c;查询数据2. MySQL架构SQL分类存储引擎 注意一般情况下&#xff1a; MySQL服务并不暴露在公网上。MySQL一般会更改服务端口。 MySQL服务&#x…

linux:数据库连接

MySql数据库 视图&#xff1a;虚拟的表 索引&#xff1a;目录 事务&#xff1a;操作 安装数据库&#xff1a;sudo apt install mysql-server //mysql8.0 安装C/C开发库&#xff1a;sudo apt install libmysqlclient-dev 数据库&#xff1a;1.mysql 文件本身 2…

在linux上安装数据库服务

一、通过本地包安装mysql 1.先通过软件将包从windows传到linux上&#xff0c;四个rpm包。 2.检查Linux上是否卸载了数据库自带的包&#xff0c;会导致安装不上。如果有&#xff0c;卸载掉。 rpm -qa | grep mysql rpm -qa | grep mariadb 卸载命令 rpm -e -nodeps 自带的包…

Linux环境下的数据库(基础篇上)

数据库 一、Linux环境下数据库的安装二、数据库的基础操作三、数据库中表的操作 一、Linux环境下数据库的安装 需要在 root 用户权限下进行数据库的一系列安装操作 安装 mariadb 服务&#xff1a; # yum install -y mariadb-server安装 mariadb 命令行客户端&#xff1a; …

Linux之数据库操作

一、mysql基本操作 1&#xff0c;连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.56 2&#xff0c;授予远程连接的权限 grant all privileges on *.* to root"%" identified by "nihao123" 3&#xff0c;修改root用户的密码 先…

Linux和数据库

Linux命令:软件测试第一个任务,一般都需要进行环境搭建,一部分环境搭建内容是在服务器上实现的,跟服务器交互(没有图形化页面),需要使用Linux命令 数据库:所有的软件在使用过程中所产生的数据,最终都要存在数据库当中,而测试工作往往会需要去校验数据的正确与否,因此需要学习数…

Linux服务器操作数据库

一、进入mysql数据库 1、使用命令连接进入数据库 mysql -u root -p参数解析&#xff1a; root-是连接数据库的用户 连接成功的截图如下 2、可以查看当前用户有哪些数据库权限 show databases; 3、进入到指定的数据库 use test;参数解析&#xff1a;test-是数据库名称 4、…

SolrCloud介绍和应用

SolrCloud是基于Solr和Zookeeper的分布式搜索方案&#xff0c;是正在开发中的Solr4.0&#xff08;目前还是ALPHA版本,基于lucene4.0&#xff09;的核心组件之一&#xff0c;它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能&#xff1a;1&#xff09;集中…

Solr简介Solr使用及SolrCloud搭建

一、Solr简介 1、Solr是什么&#xff1f; 1.1就是一个war项目 2、自己的项目如何Solr进行交互&#xff1f; 2.1特定的API叫做SolrJ(底层其实就是HttpClient) 3、具备数据持久化功能 3.1Solr中会存储需要进行搜索的数据 3.2把所有的数据都初始化到Solr中. 4、Solr作用&#…

solrcloud导入mysql数据配置

最简单的solr7集群搭建(不需要tomcat) 添加jar (三个节点都要&#xff09; 复制solr解压目录中dist下的solr-dataimporthandler-7.5.0.jar solr-dataimporthandler-extras-7.5.0.jar 复制到WEB-INF/lib下 添加mysql-connection jar包到WEB-INF/lib下&#xff0c;我这里是mysq…

Solr+Zookeeper 搭建搜索集群SolrCloud

目录 一、简介 1、SolrCloud是个什么玩意&#xff1f; 2、Solr是个什么玩意&#xff1f; 3、zookeeper是个什么玩意&#xff1f; 4、实现负载均衡的方式&#xff1a; (Nginx、Redis槽、Zookeeper) 二、SolrCloud的结构 1、物理结构 2、逻辑结构 三、SolrCloud的搭建(3…

solrCloud分布式检索流程

好久没写solr的文章了&#xff0c;刚好需要在公司作个分享&#xff0c;先总结一些先。 引用请声明原文&#xff1a;http://blog.csdn.net/duck_genuine/article/details/17014991 solrCloud分布式检索主要流程如下&#xff1a; 搜索 video&#xff0c;“美女斗秀场” 取按…