嵌入式数据库之sqlite3

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

一、数据库基本概念

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

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

二、常用的数据库

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自动增长

以此表格为例:

嵌入式数据库之sqlite3(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);//查询

任务:假如我家开了个水果超市,有以下水果,想实现自动化管理,扫描二维码就能知道当前的水果状态,进货几天了,
好久需要再次进货,那些水果畅销,那些水果不畅销,那些水果春夏秋冬的价格波动,好,那么现在我想将
这些信息保存在数据库中,那么我应该怎么做;
提示: 建立一张fruit表,
假如水果有: 苹果,香蕉,梨,橘子,葡萄....(可以自己查一下英文保存到数据库)
水果价格: 苹果 5元/斤 香蕉 3元/斤 梨 3.5元/斤 橘子2.5元/斤 葡萄 8元/斤....
当前存货: 苹果 80斤 香蕉 200斤 梨 50斤 橘子300斤 葡萄 100斤....
超市每天水果都有进货和卖出嘛,水果的价格随着季节和天气也会有波动,顾客也会看一下每天水果的价格的嘛,
所以要求,根据上述提示,利用数据库完成水果店各种水果的增(进货)删(卖出)改(波动)查(看价格)功能。
并将进出货的时间和顾客光顾的时间记录到数据库中保存。文章来源地址https://www.toymoban.com/news/detail-497835.html

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

#define DATABASE "fruit.db"

int do_insert(sqlite3 * db){
	int id;
	char name[32] = {};
	float price;
	float  stock;
	char sql[128] = {};
	char *errmsg;

	printf("Input id:");
	scanf("%d", &id);
	getchar();

	printf("Integer name:");
	scanf("%s",name);
	getchar();

	printf("Input price:");
	scanf("%f", &price);
	getchar();
	
	printf("Input stock:");
	scanf("%f", &stock);
	getchar();


	sprintf(sql,"insert into fruit values(%d, '%s', %.1f, %.1f);", id, name, price, stock);

	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg)!= SQLITE_OK){
		printf("%s\n", errmsg);
	}else{
		printf("Insert done.\n");
	}

	return 0;
}
int do_delete(sqlite3 * db){
	int id;
	char sql[128] = {};
	char *errmsg;

	printf("Input id:");
	scanf("%d", &id);
	getchar();
	
	sprintf(sql,"delete from fruit where id=%d", 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(sqlite3 * db){
	int id;
	char sql[128] = {};
	float price;
	float stock;

	char *errmsg;

	printf("Input price:");
	scanf("%f", &price);
	getchar();
	
	printf("Input stock:");
	scanf("%f", &stock);
	getchar();
	
	printf("Input id:");
	scanf("%d", &id);
	getchar();


	sprintf(sql,"update fruit set price = %.1f,stock = %.1f where id = %d",price, stock, 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 *para, int f_num, char **f_value, char **f_name){

	int i = 0;
	for(i = 0; i < f_num; i++){
		printf("%-11s ", f_value[i]);
	}
	putchar(10);

	return 0;
}
int do_query(sqlite3 * db){//查询
	char sql[128] = {};
	char *errmsg;
	sprintf(sql,"select * from fruit;");

	if(sqlite3_exec(db, sql, callback, NULL, &errmsg)!= SQLITE_OK){
		printf("%s\n", errmsg);
	}else{
		printf("query done.\n");
	}
}
int do_query1(sqlite3 * db){//查询
	char sql[128] = {};
	char *errmsg;
	char **resultp;
	int nrow;
	int index;

	int ncloumn;
	int ret;
	int i,j;

	sprintf(sql,"select * from fruit;");
	ret = sqlite3_get_table(db, sql, &resultp, &nrow,&ncloumn, &errmsg);
	for(j = 0; j<ncloumn; j++){
			printf("%-11s ", resultp[j]);
		}
	putchar(10);

	index = ncloumn;
	for(i = 0;i < nrow; i++){
		for(j = 0; j<ncloumn; j++){
			printf("%-11s ", resultp[index++]);
		}
		putchar(10);
	}

	if(ret != SQLITE_OK){
		printf("%s\n", errmsg);
	}else{
		printf("Query done.\n");
	}
	
	return 0;
}
int main(int argc, char argv[]){
	sqlite3 *db;
	char *errmsg;
	int cmd;
	if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
		
		printf("%s\n", sqlite3_errmsg(db));
		return -1;
	
	}else{
		printf("Open DATABASE success.\n");
	}

	//创建一张数据库表格
	if(sqlite3_exec(db, "create table fruit (id Integer , name char , price Integer, stock Integer);", NULL , NULL , &errmsg) != SQLITE_OK ){
	
		printf("%s\n", errmsg);
	}else{
		printf("creat table or success.\n");
	}

	while(1){
		printf("*******************************************************\n");
		printf("1:insert 2:delete 3:query 4:update 5:quit.\n");
		printf("*******************************************************\n");
		
		printf("Input cmd:");
		scanf("%d", &cmd);
		getchar();

		switch (cmd){
		
			case 1:
				do_insert(db);
				break;   
			case 2:
				do_delete(db);
				break;
			case 3:
				//do_query(db);
				
				do_query1(db);
				break;
			case 4:
				do_update(db);
				break;
			case 5:
				sqlite3_close(db);
				exit(0); 
			defalut:
				printf("Error cmd.\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

领红包