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;
}