数据库编程——sqlite3

embedded/2024/12/23 5:42:41/

目录

一、启动与退出

二、数据库创建与维护

三、标准 SQL 语句

创建表:

删除表:

向表中增加数据:

查询表中的数据:

修改表中数据:

删除表中数据:

四、补充内容

数据库编程 

sqlite3_open-toc" style="margin-left:40px;">一、sqlite3_open

sqlite3_exec-toc" style="margin-left:40px;">二、sqlite3_exec

sqlite3_close-toc" style="margin-left:40px;">三、sqlite3_close

代码示例 


一、启动与退出

  1. 启动 SQLite3:
    • 使用命令sqlite3 xxx.db可以打开一个名称为xxx.db的本地数据库。出现sqlite>提示符表明数据库管理系统启动。
    • 例如:sqlite3 test.db
  2. 退出数据库
    • 使用.q命令退出。如果一直出现...>符号,则写;结束当前输入后再使用.q命令退出。

二、数据库创建与维护

  1. 创建一个数据库
    • 方法一:使用touch xxx.db创建一个空文件,然后使用sqlite3 xxx.db启动数据库管理系统并关联该文件。
    • 方法二:直接使用sqlite3 xxx.db,如果文件不存在,会自动创建一个新的数据库文件。
  2. 系统维护命令:
    • .help:列出所有相关的系统维护命令,都是以 “.” 开头。
    • .database:列出当前库和系统中哪个文件在关联。
    • .tables:列出当期数据库中的所有表。
    • .schema xxx:列出当前指定的xxx表结构。
    • 数据导出:sqlite3 test.db.dump > 123.sql,将数据库名称为test数据库整体导出到脚本中。
    • 数据导入:sqlite3 xxx.db < test.sql,将脚本中的数据导入到数据库xxx.db中。

               这里的 > :表示输出重定向   < :表示输入重定向。

三、标准 SQL 语句

  1. 创建表:

    • 语法:create table 表名(表字段 1 类型,表字段 2 类型,...)
    • 支持的数据类型有int(整数)、text(无大小限制)、real(小数)、blob(二进制数据),默认是text类型。
    • 例如:create table user(id int,name char,age int)
  2. 删除表:

    • 语法:drop table 表名
    • 例如:drop table user
  3. 向表中增加数据:

    • 语法一:insert into 表名 (字段名称) values (值名称)
    • 例如:insert into user (id,age) values (1,10)
    • 语法二:insert into 表名 values(值 1,值 2,...)
    • 例如:insert into user values(3,"wang",11)
  4. 查询表中的数据:

    • 语法:select 列名 from 表名 [条件],条件不是必须。
    • 例如:
      • select * from user(查看所有列)。
      • select id from user。                                                                                       
      • select id,name from user where age<25。                                                       
      • where name like '三一'%_为通配符)。                                                     
      • select * from user where age>20 or age<50 order by age desc limit 2
  5. 修改表中数据:

    • 语法:update 表名 set 表字段 = 值 [满足条件]
    • 例如:
      • update user set id = 1 where name = 'li'
      • update user set id = 1 where name = "li" and passwd = "123"
      • update user set id = 2 where name = "li" or name = "zhao"
  6. 删除表中数据:

    • 语法:delete from 表名 [满足条件]
    • 例如:
      • delete from user(删除表中所有数据)。
      • delete from user where id = 1(删除id=1的数据)。
      • delete from user where id =1 and name = "zhang"
      • delete from user where id = 1 or id = 2

四、补充内容

  1. 时间列的处理:
    • 可以在表中添加时间列,例如CREATE TABLE user1(id int,name char,age int,dt datetime)
    • 插入时间值可以使用datetime('now','+8 hours')获取当前时间加上 8 小时的时间值。
    • 例如:insert into user1 values (2,'张三',23,datetime('now','+8 hours'))
  2. 自动增长列:
    • 创建表时可以将一个整数列设置为主键并指定自增长属性,例如CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime)
    • 插入数据时可以使用NULL作为该列的值,数据库会自动分配一个自增长的值。例如:insert into user3 (NULL,'李四',23,datetime('now'))

数据库编程 

sqlite3_open">一、sqlite3_open

int sqlite3_open(const char *filename, sqlite3 **ppDb);
  1. 功能:这个函数用于打开一个 SQLite 数据库文件。如果数据库文件不存在,SQLite 可能会根据具体情况创建一个新的数据库文件。
  2. 参数:
    • filename:指向要打开的数据库文件名的字符串。可以是相对路径或绝对路径。
    • ppDb:是一个指向 sqlite3 结构体指针的指针。函数成功执行后,这个指针将指向一个打开的数据库连接。
  3. 返回值:
    • 如果成功打开数据库,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

sqlite3_exec">二、sqlite3_exec

int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg );
  1. 功能:用于执行一条或多条 SQL 语句。可以执行各种 SQL 操作,如创建表、插入数据、查询数据、更新数据、删除数据等。
  2. 参数:
    • sqlite3*:一个打开的数据库连接指针。
    • sql:要执行的 SQL 语句字符串。可以是单个 SQL 语句或多个 SQL 语句的序列,以分号分隔。
    • callback:一个回调函数,每当执行一个查询语句并返回结果时,这个回调函数会被调用。如果不需要处理查询结果,可以设置为 NULL
    • void *:一个用户提供的指针,可以在回调函数中使用,通常用于传递上下文信息。
    • errmsg:如果发生错误,这个指针将被设置为指向一个包含错误信息的字符串。
  3. 返回值:
    • 如果成功执行 SQL 语句,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

sqlite3_close">三、sqlite3_close

int sqlite3_close(sqlite3*);
  1. 功能:用于关闭一个之前打开的 SQLite 数据库连接。
  2. 参数:
  3. 返回值:
    • 如果成功关闭数据库连接,函数返回 SQLITE_OK(0)。
    • 如果发生错误,返回一个错误码。

代码示例 

#include <stdio.h>
#include <sqlite3.h>// 定义回调函数 show,用于处理查询结果
int show(void* arg, int col, char** result, char** title)
{// static 变量 flag,用于标记是否是第一次调用该函数static int flag = 0;int i;// 如果是第一次调用if (flag == 0){// 遍历列数for (i = 0; i < col; i++){// 打印列名printf("%s\t", title[i]);}// 换行printf("\n");// 将 flag 置为 1,表示不是第一次调用了flag = 1;}// 遍历列数for (i = 0; i < col; i++){// 打印查询结果中的每一项printf("%s\t", result[i]);}// 换行printf("\n");// 返回 0,表示继续处理下一行结果(如果有)return 0;
}int main()
{sqlite3* db;// 尝试打开数据库文件 /home/linux/Desktop/0904/aaa.db,并将数据库连接指针存储在 db 中int ret = sqlite3_open("/home/linux/Desktop/0904/aaa.db", &db);if (ret!= SQLITE_OK){// 如果打开失败,打印错误信息fprintf(stderr, "sqlite3_open error,%s\n", sqlite3_errstr(ret));// 关闭数据库连接sqlite3_close(db);return 1;}char *errmsg;// 定义 SQL 查询语句,这里是查询表 user 中的所有数据char sqlite3_cmd[] = "select * from user;";// 执行 SQL 查询语句,将查询结果通过回调函数 show 进行处理,参数 NULL 表示没有额外的用户数据传递给回调函数,errmsg 用于存储错误信息ret = sqlite3_exec(db, sqlite3_cmd, show, NULL, &errmsg);if (ret!= SQLITE_OK){// 如果执行查询失败,打印错误信息fprintf(stderr, "exec error,%s\n", errmsg);// 释放错误信息占用的内存sqlite3_free(errmsg);// 关闭数据库连接sqlite3_close(db);return 1;}// 关闭数据库连接sqlite3_close(db);// 打印 "Hello World!"printf("Hello World!\n");return 0;
}


http://www.ppmy.cn/embedded/108621.html

相关文章

目标检测-YOLOv1

YOLOv1介绍 YOLOv1&#xff08;You Only Look Once version 1&#xff09;是一种用于目标检测的深度学习算法&#xff0c;由Joseph Redmon等人于2016年提出。它基于单个卷积神经网络&#xff0c;将目标检测任务转化为一个回归问题&#xff0c;通过在图像上划分网格并预测每个网…

Qt/C++百度地图/高德地图/天地图/腾讯地图/谷歌地图/加载绘图工具栏

一、前言说明 在地图中提供一个绘图工具栏&#xff0c;可以便捷的在地图上添加各种覆盖物&#xff0c;比如折线、多边形、矩形、圆形等&#xff0c;然后可以获取这些覆盖物的路径以及中心点等属性。这里有几个小插曲&#xff0c;比如百度地图gl版本默认不提供这个功能&#xf…

windows环境安装OceanBase数据库并创建表、插入数据

windows环境安装OceanBase数据库并创建表、插入数据 前言&#xff1a;OceanBase数据库目前不支持直接在Windows环境下安装&#xff0c;安装比较麻烦&#xff0c;记录一下安装过程 1.安装方案 根据官方文档&#xff1a;https://www.oceanbase.com/docs/common-oceanbase-databa…

K8s高可用集群部署----超详细(Detailed Deployment of k8s High Availability Cluster)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

浅谈人工智能之VSCode:使用插件与ollama本地大模型交互

浅谈人工智能之VSCode&#xff1a;使用插件与ollama本地大模型交互 我们在之前的文档中已经说明如何使用Ollama部署本地大模型&#xff0c;这里就赘述&#xff0c;具体如何部署可参考文档&#xff1a; 浅谈人工智能之Windows&#xff1a;基于ollama进行本地化大模型部署 准备…

计算机网络与Internet应用

一、计算机网络 1.计算机网络的定义 网络定义&#xff1a;计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享…

鸿蒙MPChart图表自定义(四)短刻度线

对于图表中的x轴效果&#xff0c;我们有时想要实现如图所示的特定刻度线。若需绘制x轴的短刻度线&#xff0c;我们可以利用现有资源&#xff0c;将原本的网格线稍作修改&#xff0c;只需绘制一条简洁的短线即可达到目的。 具体的方法就是写一个类MyXAxisRender继承自XAxisRend…

制造业项目管理系统:企智汇软件专为制造企业量身定制项目管理

企智汇制造业项目管理系统是一款专为制造业量身定制的项目管理软件&#xff0c;旨在帮助企业高效、可视化管理项目&#xff0c;优化工作流程&#xff0c;并提升整体竞争力。以下是该系统的详细介绍&#xff1a; 一、系统概述 企智汇制造行业项目管理系统的功能模块涵盖:客户管…