当前位置: 首页 > news >正文

sqlite3_exec函数练习

 使用 sqlite3_exec 函数,执行如下几个语句

create table if not exists tb( name text primary key, pswd text not null );

insert into tb(name,pswd) values("123","abcdefg")

char code_pswd[20] = "" printf("请输入新的密码:");

scanf("%s",code_pswd) 执行语句 :update tb set pswd = code_pswd where name = "123";

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sqlite3.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
static int callback(void *data, int argc, char **argv, char **azColName) {return 0;
}
int main(int argc, const char *argv[])
{sqlite3 *db;char *err_msg = 0;int rc;// 1. 打开或创建数据库rc = sqlite3_open("user.db", &db);if (rc != SQLITE_OK) {fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}// 2. 创建表const char *create_sql = "create table if not exists tb(""name text PRIMARY KEY,""pswd text NOT NULL);";rc = sqlite3_exec(db, create_sql, callback, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "创建表错误: %s\n", err_msg);sqlite3_free(err_msg);} else {printf("表创建成功或已存在\n");}// 3. 插入数据(使用单引号包裹字符串,符合 SQL 标准)const char *insert_sql = "insert or ignore into tb(name, pswd) values ('123', 'abcdefg');";// 使用 INSERT OR IGNORE 避免主键冲突错误rc = sqlite3_exec(db, insert_sql, callback, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "插入数据错误: %s\n", err_msg);sqlite3_free(err_msg);} else {printf("数据插入成功或已存在\n");}// 4. 更新密码(处理用户输入)char code_pswd[20] = {0};printf("请输入新的密码: ");scanf("%s",code_pswd);// 注意:直接拼接 SQL 字符串存在 SQL 注入风险!// 此处仅为演示 sqlite3_exec 用法,实际开发推荐使用参数化查询char update_sql[128] = {0};snprintf(update_sql, sizeof(update_sql), "update tb set pswd = '%s' where name = '123';", code_pswd);rc = sqlite3_exec(db, update_sql, callback, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "更新数据错误: %s\n", err_msg);sqlite3_free(err_msg);} else {printf("密码更新成功\n");}// 5. 关闭数据库sqlite3_close(db);return 0;
}

http://www.dtcms.com/a/283565.html

相关文章:

  • 多维动态规划题解——最小路径和【LeetCode】记忆化搜索翻译为递推写法
  • # Win11开机卡死?无法进入登录界面?3招强制进安全模式,快速修复系统
  • 亚马逊广告深度优化:如何平衡大词与小词的投放,提升转化率?
  • 初学python的我开始Leetcode题-13
  • webpack将组件vue进行编译混淆,并能正常使用编译之后的文件
  • H3CNE综合实验
  • 2025第二届绿色能源与机电工程国际学术会议(ICGEME 2025)
  • 数据库(five day)——物物而不物于物,念念而不念于念。
  • java基础(day09)
  • Python中的列表list、元组(笔记)
  • BASE64编码通俗介绍
  • 观察者设计模式
  • 嵌入式单片机开发实战指南: 从RISC-V到TinyML全栈技术
  • 测试工作中的质量门禁管理
  • DMC-E 系列总线控制卡----雷赛板卡介绍(十六)
  • ST表及数学归纳法
  • 洛谷 P11247 [GESP202409 六级] 算法学习-普及/提高-
  • IIS网站间歇性打不开暴力解决方法
  • 基于多源时序特征卷积网络(MSTFCN)的光伏功率预测模型
  • 对称二叉树、二叉树直径
  • 云测试提前定位和解决问题 萤火故事屋上架流程
  • LLM指纹底层技术——模型架构
  • IPD核心思想之一:业务与能力并重
  • 专业文档盖章软件,批量处理高效
  • Qt开发环境搭建指南:从零开始构建跨平台应用基石
  • MySQL InnoDB 存储引擎
  • 算法穿上隐身衣:数据交易中数据黑箱与算法透明性的法律义务边界
  • Kiro:亚马逊云发布,革命性AI编程工具!以“规范驱动开发“重塑软件构建范式!
  • 识别装甲板
  • C#语法基础总结(超级全面)(二)