【嵌入式数据库之sqlite3】

这篇具有很好参考价值的文章主要介绍了【嵌入式数据库之sqlite3】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.数据库基本概念(理解)

1.数据

2.数据库

二.常用的数据的数据库(了解)

1.大型数据库

2.中型数据库

3.小型数据库

三.基于嵌入式的数据库(了解)

四.SQLite基础(了解)

五.创建数据库(熟练)

1.手工创建

2.代码创建

六.SQLite编程接口

七.代码示例(学生管理系统)

八.水果店铺管理系统


一.数据库基本概念(理解)

1.数据

        能够输入计算机并能够计算机程序识别和处理的信息集合。(不只是数字)

2.数据库

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

二.常用的数据的数据库(了解)

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基础(了解)

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

SQLite有以下特性:

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

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

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

        支持数据库大小至2TB;

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

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

五.创建数据库(熟练)

1.手工创建

        使用SQLite3工具,通过手工输入SQL命令行完成数据库创建. 用户在Linux的命令行界面中输入SQLite3可启动SQLite3工具

       数据库的安装

 sudo dpkg -i  *.deb  //本地安装包安装
 sudo apt-get install sqlite3  //在线安装

        数据库常用命令

        (1) 系统命令都以“ . ”开头

.exit //退出
.quit //退出
.table //查看表
.schema <table_name> //查看表的结构 
.help //显示所有命令
.database //显示当前打开的数据库文件

打开数据库文件 

在终端下运行sqlite3   <*.db>,出现如下提示符
SQLite  version  3.7.2
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite>
<*.db> 是要打开的数据库文件。若该文件不存在,则自动创建

         (2)sql执行语句,都以“ ;”结尾

创建一张表

create  table  <table_name>  (f1  type1, f2  type2,…);

crerate table stuinfo(id integer ,name char ,age intger,score float);

插入一条记录 

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);

 查看数据库记录(where后面是条件)

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;

 删除一条记录

sqlite>delete  from  <table_name>  where  <expression>;

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

更新一条记录 

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;

 删除一张表

drop  table  <table_name>

drop table stuinfo;

 增加一列

alter table <table> add column <field> <type> default  …; 

alter table stuinfo add column sex char;

 删除一列(通过创建新的表来删除)

create table stu as select id, name, score from stuinfo;
drop table stuinfo;
alter table stu rename to stuinfo;

2.代码创建

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

六.SQLite编程接口

        1.打开(创建)sqlite数据库

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

path:数据库文件路径(数据库名称)
db:指向sqlite句柄的指针
返回值:成功返回0,失败返回错误码(非零值)

        2.关闭sqlite数据库       

int   sqlite3_close(sqlite3 *db);
    
返回值:成功返回0,失败返回错误码

        3.得到错误信息的描述

const  char  *sqlite3_errmg(sqlite3 *db);         
返回值:返回错误信息

        4.执行SQL语句操作 

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

db:数据库句柄
sql:SQL语句
callback:回调函数
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码


 /* Callback function */
功能:查询语句执行之后,会回调此函数
查询回调函数:

int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name);

参数:arg   接收sqlite3_exec 传递来的参数
      ncolumns 列数(记录中包含的字段数目)
      f_value 列的值的地址(包含每个字段值的指针数组)
      f_name   列的名称(包含每个字段名称的指针数组)
返回值:成功返回0,失败返回-1

        5. 不使用回调函数执行SQL操作查询

不使用回调函数执行SQL语句
int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);

db:数据库句柄
sql:SQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码

七.代码示例(学生管理系统)

        管理学生的信息

八.水果店铺管理系统

        管理水果种类,重量,价格等信息和信息变动记录文章来源地址https://www.toymoban.com/news/detail-704104.html

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
#include <time.h>
 
#define  DATABASE  "fruit.db"
#define TABLES "fruit"
#define  N  128
 
int do_insert(sqlite3 *db,char *buf);
int do_update_weight(sqlite3 *db,char *buf);
int do_update_price(sqlite3 *db);
int do_query(sqlite3 *db);
int callback(void *arg, int f_num, char ** f_value, char ** f_name);
 
int main(int argc, const char *argv[])
{
	sqlite3 *db;
	char *errmsg;
	int n;
	char sql[128] = {};
	char buf[128] = {};
 
	time_t t;
	struct tm *tp;
 
	if(sqlite3_open(DATABASE, &db) != SQLITE_OK)
	{
		printf("%s\n", sqlite3_errmsg(db));
		return -1;
	}
	else
	{
		printf("open DATABASE success.\n");
	}
	sprintf(sql,"create table if not exists '%s' (id integer primary key autoincrement,name char,weight float,price float,time char);",TABLES);
	if(sqlite3_exec(db, sql,NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Create or open table success.\n");
	}
	time(&t);
	tp = localtime(&t);
	sprintf(buf,"%d-%02d-%02d %02d:%02d:%02d\n",tp->tm_year+1900, tp->tm_mon+1,tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec);
	
	printf("%s",buf);
	while(1)
	{
		puts("-----------------------------------------");
		do_query(db);
		puts("-----------------------------------------");
		puts("");
		printf("********************************************\n");
		printf("1: insert 插入  2:query 查询 3:trade 交易 4:update 更新 5:quit 退出系统\n");
		printf("********************************************\n");
		printf("Please select:");
		scanf("%d", &n);
 
		switch(n)
		{
		case 1:
			do_insert(db,buf);
			break;
		case 2:
			do_query(db);
			break;
		case 3:
			do_update_weight(db,buf);
			break;
		case 4:
			do_update_price(db);
			break;
		case 5:
			printf("main exit.\n");
			sqlite3_close(db);
			exit(0);
			break;
		default :
			printf("Invalid data n.\n");
		}
 
	}
 
	return 0;
}
 
 
 
int do_insert(sqlite3 *db,char *buf)
{
	char name[32] = {};
	float weight;
	float price;
	char sql[N] = {};
	char *errmsg;
 
 
	printf("Input fruit name:");
	scanf("%s", name);
	getchar();
 
	printf("Input weight:");
	scanf("%f", &weight);
 
	printf("Input price:");
	scanf("%f", &price);
 
	sprintf(sql, "insert into '%s' (name,weight,price,time)values('%s', '%.3f', '%.3f','%s')",TABLES, name, weight, price,buf);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Insert done.\n");
	}
 
	return 0;
}
 
 
int do_update_weight(sqlite3 *db,char *buf)
{
	int id;
	char sql[N] = {};
	char *errmsg;
	float weight;
 
	printf("Input id:");
	scanf("%d", &id);
 
	printf("Input weight:");
	scanf("%f", &weight);
 
 
	sprintf(sql, "update '%s' set weight='%f',time='%s' where id=%d",TABLES, weight,buf,id);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Delete done.\n");
	}
 
	return 0;
}
 
 
int do_update_price(sqlite3 *db)
{
	float price;
	int id;
	char sql[N] = {};
	char *errmsg;
 
	printf("Input id:");
	scanf("%d", &id);
 
	printf("Input alter price:");
	scanf("%f", &price);
 
	sprintf(sql, "update '%s' set price='%f' where id=%d",TABLES , price,id);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("update done.\n");
	}
 
	return 0;
}
 
 
int callback(void *arg, int f_num, char ** f_value, char ** f_name)
{
	int i = 0;
 
	for(i = 0; i < f_num; i++)
	{
		//	printf("%-8s %s", f_value[i], f_name[i]);
		printf("%-8s", f_value[i]);
	}
 
	putchar(10);
 
	puts("-----------------------------------------");
 
	return 0;
}
 
int do_query(sqlite3 *db)
{
	char *errmsg;
	char sql[N] = {};
 
	sprintf(sql,"select * from '%s';",TABLES);
	if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)
	{
		printf("%s", errmsg);
	}
	else
	{
		printf("select done.\n");
	}
	return 0;
}

到了这里,关于【嵌入式数据库之sqlite3】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式数据库:SQLite3的安装和使用说明

    目录 一,SQLite简介 ① SQLite与传统服务器型数据库 ② SQLite与MySQL比较 ③ 基于嵌入式的数据库种类 二,SQLite数据库安装 ① 输入命令安装 ② 网页安装 ● 安装步骤 三,SQLite命令用法 ● 创建一个数据库 ● 创建一张表格 ● 插入一条记录 ● 查看数据库的记录 ● 删除一条

    2024年01月21日
    浏览(84)
  • BL302嵌入式ARM控制器进行SQLite3数据库操作的实例演示

    本文主要讲述了在钡铼技术BL302嵌入式arm控制器上运行 SQLite3 数据库的命令示例。SQLite3 是一个轻型的嵌入式数据库,不需要安装数据库服务器进程,占用资源低且处理速度快。 首先,需要将对应版本的 SQLite3 文件复制到设备的 /usr/ 目录下,并解压缩。然后进入 /usr/lib 目录,

    2024年02月14日
    浏览(49)
  • 嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

    目录 前言 一、sqlite概念和特性 二、sqlite安装 三、sqlite3数据类型  四、sqlite数据库约束 五、sqlite常用命令  六、SQL语句(增删改查) 七、sqlite使用实例(教学管理数据库) 总结 数据在实际工作中应用非常广泛,数据库的产品也比较多,oracle、DB2、SQL2000、mySQL;基于嵌入式

    2024年02月08日
    浏览(57)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第八天-Linux sqlite3数据库(物联技术666)

       更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客 物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件

    2024年01月25日
    浏览(66)
  • 嵌入式数据库之SQLite

    1.SQLite简介 轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂。 SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作 为应用程序的一部分运行。 My

    2024年02月15日
    浏览(45)
  • lv9 嵌入式开发 数据库sqlite

    数据(Data)               能够输入计算机并能被计算机程序识别和处理的信息集合 数据库 (Database)             数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合 大型数据库 Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广

    2024年02月05日
    浏览(63)
  • 嵌入式中如何用C语言操作sqlite3(07)

    sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。 本篇假设数据库为my.db,有数据表student。 no name score 4 嵌入式开发爱好者 89.0 创建表格语句如下: sqlite3_open sqlite3_close sqlite3_get_table 举例 下面比如我们要显示st

    2024年02月07日
    浏览(48)
  • 一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库

    今天给大家分享一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库:LiteDB。本篇文章主要是介绍LiteDB和在.NET中如何使用。 LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。 无服务器的 NoSQL 文档存储 简单的 API,类似于 MongoDB 100% 的 C# 代码支持 .NET 4.5 / NETStandard 1.

    2024年02月02日
    浏览(44)
  • Python数据库模块(sqlite3,SQLite3)

    创建数据库:在控制台sqlite3 name sqlite3.connect(database [,timeout ,other optional arguments]) 打开数据库;如果指数据库存在则返回一个连接对象,如果不存在则会创建一个数据库; connection.cursor() 创建一个cursor; cursor.execute(sql) 执行一个sql语句,该语句可以被参数化; connection.execut

    2024年03月19日
    浏览(61)
  • 数据库--Sqlite3

     1、思维导图  2sqlite3在linux中是实现数据的增删,改 #includemyhead.h int main(int argc, const char *argv[]) {         //1、定义一个数据库句柄指针         sqlite3* ppDb =NULL;         //2、创建或打开数据库         if(sqlite3_open(\\\"./mydb.db\\\",ppDb)!=SQLITE_OK)         {                 printf(

    2024年04月27日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包