Linux软件编程——数据库——自制小词典

一、数据库编程相关函数接口:

注:示例

ret = sqlite3_exec(pdb, cmdbuff, NULL, NULL, &perrmsg);

if (ret != SQLITE_OK)

{

fprintf(stderr, "sqlite_exec failed:%s\n", perrmsg);

sqlite3_free(perrmsg);

sqlite3_close(pdb);

return -3;

}

二、回调函数与查询逻辑

回调函数原型(固定格式,不能修改):

int callback(void *arg, int col_num, char **col_values, char **col_names);

  • arg:sqlite3_exec传入的ptmpmean(结构体指针),通过void*通用类型接收,内部强转为mean_t*。
  • col_num:查询结果的列数(这里查含义列,所以是 1)。
  • col_values:查询结果的数值数组(col_values[0]就是含义)。
  • col_names:列名数组(col_names[0]是含义)。

三、练习:利用数据库自制字典

1.access 函数功能 :检查当前进程对指定文件的访问权限(或文件是否存在)。

int access(const char *pathname, int mode);

  • 参数 1 pathname:要检查的文件路径(如 "dict.db")。
  • 参数 2 mode:检查模式(常用宏定义):
    • F_OK:固定宏(值为 0),仅检查文件是否存在(不检查权限)。
    • R_OK:检查是否有读权限。
    • W_OK:检查是否有写权限。
    • X_OK:检查是否有执行权限。
  • 返回值:成功(满足检查条件)返回0,失败返回-1(并设置errno)。

2.dict.db 是 SQLite 数据库文件 (不是单纯的表格),文件里可以包含多个表(比如这里的dict表)。

3.primary key:标记该列为主键(值唯一且非空),用于唯一标识一行数据。

SQLite 中,integer primary key 列会自动自增, 插入时写NULL就会自动生成递增的整数值。

4.SQL 语句中\"%s\"的\作用:

\ 是转义字符 ,C 语言中,字符串用""包裹,如果字符串内部需要",必须加\转义,否则编译器会认为字符串提前结束。

5.fgets(tmpbuff, sizeof(tmpbuff), fp):读取一行数据 (直到遇到\n或文件结束),最多读sizeof(tmpbuff)-1个字符(避免缓冲区溢出)。

6.加载进度计算

  • fseek(fp, 0, SEEK_END):将文件指针移到文件末尾。
  • tlen = ftell(fp):获取文件总长度(字节数)。
  • rewind(fp):将文件指针移回开头。
  • clen = ftell(fp):每次读取一行后,获取当前指针位置,计算已加载比例:(double)clen / tlen * 100.0(百分比)。

7.printf 行缓存与 fflush

printf 行缓存与 fflush
  • printf 是行缓冲 :输出内容会先存在缓冲区,遇到\n或缓冲区满时才刷新到终端。
  • \r 是回车符:光标回到行首(不换行),所以printf("已加载:%.2lf\r", ...)会在同一行更新进度。
  • fflush(stdout):强制刷新标准输出缓冲区,让进度实时显示在终端(否则可能延迟显示)。
相关推荐
仍然.1 小时前
Redis---缓存
数据库·redis·缓存
Aloudata2 小时前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
细嗅蔷薇@2 小时前
排序和分⻚(order by 、limit)
数据库·oracle
wdfk_prog2 小时前
LWIP教程 09:从 `tcp_slowtmr()` 到 Fast Retransmit——TCP 超时重传与重复 ACK
服务器·网络·数据库·网络协议·tcp/ip
逸模2 小时前
BIM在连锁餐饮装修中的应用:不只是画三维图
大数据·数据库·人工智能·物联网·建模
梦想平凡2 小时前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影2 小时前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
天天喝旺仔3 小时前
MySQL 索引原理与慢查询优化实战:从 B+ 树到执行计划调优
数据库·sql·mysql·性能优化
liulilittle3 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen3 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust