sqlite3 预处理方法 | 数据库论坛-大发黄金版app下载

#include  <stdio.h>
#include  <stdarg.h>
#include  "sqlite3.c"
// 参数类型枚举
typedef  enum
{
 param_type_int,
 param_type_text,
 param_type_null
} paramtype;
// 动态绑定函数
int  bind_params(sqlite3_stmt *stmt, int  param_count, ...)
{
 va_list  args;
 va_start(args, param_count);
 int  rc;
 for (int  i = 0; i < param_count; i)
    {
 // 获取参数类型
 paramtype  type = va_arg(args, paramtype);
 printf("参数%d类型: %d\n", i  1, type);
 switch (type)
        {
 case  param_type_int:
        {
 int  value = va_arg(args, int);
 rc = sqlite3_bind_int(stmt, i  1, value);
 break;
        }
 case  param_type_text:
        {
 const  char *value = va_arg(args, const  char *);
 rc = sqlite3_bind_text(stmt, i  1, value, -1, sqlite_static);
 break;
        }
 case  param_type_null:
        {
 rc = sqlite3_bind_null(stmt, i  1);
 break;
        }
 default:
 rc = sqlite_error;
        }
 if (rc != sqlite_ok)
        {
 fprintf(stderr, "绑定参数%d失败: %s\n", i  1, sqlite3_errmsg(sqlite3_db_handle(stmt)));
 va_end(args);
 return  rc;
        }
    }
 va_end(args);
 return  sqlite_ok;
}
int  main()
{
 sqlite3 *db;
 sqlite3_stmt *stmt;
 const  char *sql;
 int  rc;
 // 打开数据库连接
 rc = sqlite3_open("test4.db", &db);
 if (rc != sqlite_ok)
    {
 fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
 return  1;
    }
 // 创建表
 sql = "create table if not exists users (id integer primary key, name text, age integer);";
 rc = sqlite3_exec(db, sql, 0, 0, null);
 if (rc != sqlite_ok)
    {
 fprintf(stderr, "无法创建表: %s\n", sqlite3_errmsg(db));
 sqlite3_close(db);
 return  1;
    }
 // 插入sql
 sql = "insert into users (name, age) values (:name, :age);";
 rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
 if (rc != sqlite_ok)
    {
 fprintf(stderr, "无法准备sql语句: %s\n", sqlite3_errmsg(db));
 sqlite3_close(db);
 return  1;
    }
 // 插入多条记录
 const  char *names[] = {"alice", "bob", "charlie"};
 int  ages[] = {25, 30, 35};
 int  num_records = sizeof(names) / sizeof(names[0]);
 for (int  i = 0; i < num_records; i)
    {
 rc = bind_params(stmt, 2, param_type_text, names[i], param_type_int, ages[i]);
 if (rc != sqlite_ok)
        {
 fprintf(stderr, "绑定参数失败: %d\n", rc);
 break;
        }
 rc = sqlite3_step(stmt);
 if (rc != sqlite_done)
        {
 fprintf(stderr, "执行失败: %s\n", sqlite3_errmsg(db));
        }
 else
        {
 printf("插入成功: %s, %d\n", names[i], ages[i]);
        }
 sqlite3_reset(stmt);
 sqlite3_clear_bindings(stmt);
    }
 // 释放资源
 sqlite3_finalize(stmt);
 sqlite3_close(db);
 return  0;
}
本作品采用《cc 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
15
粉丝
0
喜欢
9
收藏
27
排名:1443
访问:2516
博客标签
社区赞助商
网站地图