嵌入式数据库开发编程(零)

简介: 嵌入式数据库开发编程(零)

一 数据库


1.1 在ubuntu中安装数据库

sudo apt-get install sqlite3 libsqlite3-dev

安装测试:

输入sqlite3,如果能够成功进入数据库,说明安装成功:

0a2653c851af460fa595bd959398a8f1.png


1.2 数据库的操作


1.2.1 数据库命令的分类


系统命令:是以.开头的命令,主要用于对当前数据库操作

注意:系统命令后面不能加;

普通命令:是以;结尾的命令,主要对数据库中的表进行操作

注意:普通命令前不能加 .


1.2.2 常用的系统命令


.help:查看帮助信息,列出所有的系统命令

.exit: 退出数据库

.quit:退出数据库

.databases:查看当前数据库信息

.tables:列出当前数据库中所有表的表名

.schema:列出数据库中所有表的结构


1.2.3 数据中的常用的语句


-- 进入sqlite3
sqlite3 student.db
-- 退出数据库
.exit
-- 创建一张表
 create table stu(id int,name char,sex char,score int);
 注意:字符或者字符串的类型指定为char或者text
 -- 查看表结构
 .schema
 -- 插入数据
 insert into stu (id,name,sex,score) values(1001,"zhangsan",'m',98);
 insert into stu values(1002,"lisi",'f',99);
 insert into stu values(1003,"wanger",'m',100),(1004,"xiaoming",'f',101);
 --查询数据
select * from stu;  //查找所有记录
select *from stu where sex='f'; //查找符合条件的记录
select *from stu where sex='f' and id = 1002; 
select *from stu where sex='f' or id = 1001;
select id,name from stu;  //只查询id和name
-- 删除记录
delete from stu where id = 1001;
-- 修改记录
update stu set score=77 where id = 1003;
--添加一列
alter table stu add column vip int;
--删除一列
    sqlites不允许直接删除一列
    1)先创建一张新表
    create table stu1 as select id,name from stu;
    2) 删除原来的旧表
    drop table stu;
    3)对新表进行重命名
    alter table stu1 rename to stu;
-- 数据库主键(既设置的数据将会是唯一的存在的)
    create table usr(name text primary key,passwd text);
-- 删除表
    drop table stu;


1.3 sqlite数据库中常用api


1.3.1 sqlite3_open


头文件:#include

原型:int sqlite3_open(const char *filename,sqlite3 **ppDb);

功能:打开或者创建一个数据库

参数:

filename:数据库的名字

PPdb:操作数据库的指针,句柄。

返回值:

成功:返回:SQLITE_OK

失败:error_code 可通过sqlite3_errmsg获取错误信息


1.3.2 int sqlite3_close(sqlite3 * db)


功能:关闭一个数据库


1.3.3 sqlite3_exec


头文件:#include

原型:int sqlite3_exec(sqlite3 db,const char sql,int (callback)(void ,int,char,char),void *arg,char errmsg);

功能:执行一条sql语句

参数:

db:数据库的句柄指针

sql:将要被执行sql语句

callback:回调函数,只有在查询语句时,才会给回调函数传参

arg:为callback传参的

errmsg:错误信息地址

返回值:

成功:返回:SQLITE_OK

失败:error_code 可通过sqlite3_errmsg获取错误信息

******************************************************

int (*callback)(void *arg,int ncolumn,charf_value,char**f_name)

功能:得到查询的结果

参数:

arg:为回调函数传参使用的

ncolumn:记录包含的字段的数目(列数)

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

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

返回值:

成功 0

出错:非0


1.3.4 sqlite3_get_table


原型:int sqlite3_get_table(sqlite3 *db,const char *sql,char ***pazresult,int *pnRow,int *pnColumn,char **pzErrmsg);

功能:查询数据库,它会创建一个新的内存区域来存放查询的结果信息

参数:

db:数据库的句柄指针

sql:将要被执行sql语句

pazresult:查询的结果

pnRow:行数

pnColumn 列数

pzErrmsg 错误信息

返回值:

成功 0

出错:errcode

pnRow的值为查询到的符合条件的记录数(不包含字段名)。

pnColumn的值为查询到的符合条件的字段数。


1.3.5 void sqlite3_free_table(char ** result)


功能:释放内存

2d65d23f6d4748949b924e4057485923.png

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
int print(void *arg,int column,char **value,char **name)  //column为列数,name:字段名 value:数据
{
    int i;
    for(i = 0 ; i < column;i++)
    {
        printf("%s = %s ",name[i],value[i]);
    }
    printf("\n");
    return 0;
}
int main(int argc, char const *argv[])
{
    sqlite3 *ppdb;
    //打开或者创建数据库
    int ret = sqlite3_open("stu.db",&ppdb);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3 open: %s\n",sqlite3_errmsg(ppdb));
        return -1;
    }
    //创建表
    char sql[128] = {0};
    sprintf(sql,"create table if not exists stu(id int,name char,sex char,score int);");
    ret = sqlite3_exec(ppdb,sql,NULL,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_exec: %s\n",sqlite3_errmsg(ppdb));
        return -1;        
    }
    //插入数据
    int i;
    int id,score;
    char name[32] = {0};
    char sex;
    /*for(i = 0; i < 2;i++)
    {
        printf("请输入学号、姓名、性别、分数:\n");
        scanf("%d%s %c %d",&id,name,&sex,&score);
        memset(sql,0,sizeof(sql));
        sprintf(sql,"insert into stu values(%d,'%s','%c',%d);",id,name,sex,score);
        ret = sqlite3_exec(ppdb,sql,NULL,NULL,NULL);
        if(ret != SQLITE_OK)
        {
            printf("sqlite3_exec2: %s\n",sqlite3_errmsg(ppdb));
            return -1; 
        }
    }*/
    memset(sql,0,sizeof(sql));
    sprintf(sql,"select * from stu;");
    /*ret = sqlite3_exec(ppdb,sql,print,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_exec: %s\n",sqlite3_errmsg(ppdb));
        return -1;        
    }*/
    char **result;
    int row,column;
    ret = sqlite3_get_table(ppdb,sql,&result,&row,&column,NULL);  //row:行   column:列
    if(ret != SQLITE_OK)
    {
        printf("sqlite3_get_table : %s\n",sqlite3_errmsg(ppdb));
        return -1;
    }
    int j;
    int Index = column;
    for(i = 0; i < row;i++)   //行
    {
        for(j = 0; j < column;j++)   //列
        {
            printf("%s = %s ",result[j],result[Index]);
            Index++;
        }
        putchar(10);
    }
    return 0;
}



相关文章
|
11天前
|
Rust 前端开发 关系型数据库
Tauri 开发实践 — Tauri 集成本地数据库
本文介绍了在 Tauri 框架中集成本地数据库的几种方案,包括直接绑定 SQLite、使用第三方数据库库和使用 tauri-plugin-sql-api 插件。最终选择了 tauri-plugin-sql-api,因为它集成简单、支持多种数据库类型,并且与 Tauri 框架深度整合,提升了开发效率和安全性。文章详细介绍了如何安装和使用该插件,以及如何编写核心代码实现数据库操作。
54 2
|
18天前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
24 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
8天前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
|
1月前
|
存储 数据库 Python
python的对象数据库ZODB的使用(python3经典编程案例)
该文章介绍了如何使用Python的对象数据库ZODB来进行数据存储,包括ZODB的基本操作如创建数据库、存储和检索对象等,并提供了示例代码。
24 0
|
1月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
60 0
|
2月前
|
存储 前端开发 关系型数据库
秀啊,用Python快速开发在线数据库更新修改工具
秀啊,用Python快速开发在线数据库更新修改工具
|
2月前
|
前端开发 数据库 Python
用Python轻松开发数据库取数下载工具
用Python轻松开发数据库取数下载工具
|
2月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
44 0
|
2月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
39 0
|
2月前
|
数据库 测试技术 开发者
Play Framework的测试魔法:让代码在舞台上翩翩起舞,确保应用质量的幕后英雄!
【8月更文挑战第31天】Play Framework不仅以其高效开发与部署流程著称,还内置了强大的测试工具,提供全面的测试支持,确保应用高质量和稳定性。本文将详细介绍如何在Play Framework中进行单元测试和集成测试,涵盖`WithApplication`、`WithServer`及`WithDatabase`等类的使用方法,并通过示例代码手把手教你如何利用Play的测试框架。无论是单元测试、集成测试还是数据库操作测试,Play Framework均能轻松应对,助你提升应用质量和开发效率。
35 0