sqlite3_exec虽然好用,但是一般不推荐直接使用。

常用的一组操作是:

关于sqlite3_exec和sqlite3_prepare_v2的使用场景,建议如下:

一个小DEMO:

#include <stdio.h>
#include <sqlite3.h> int main(int argc, char **argv)
{
sqlite3 *db;
int rc; rc = sqlite3_open("test.db", &db); if (rc) {
printf("Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return ;
} else {
printf("Open database successfully\n");
} sqlite3_stmt *stmt = NULL; const char *sql = "SELECT * FROM COMPANY";
// const char *sql = "SELECT * FROM COMPANY WHERE AGE=?;"; sqlite3_prepare_v2(db, sql, -, &stmt, NULL); // sqlite3_bind_int(stmt, 1, 25); int col_count = sqlite3_column_count(stmt);
printf("该条记录共%d列\n", col_count); while (SQLITE_ROW == sqlite3_step(stmt)) {
int column0_type = sqlite3_column_type(stmt, );
const char *column0_name = sqlite3_column_name(stmt, );
int column0_value = sqlite3_column_int(stmt, );
printf("col: 0 type: %d name: %-10s value: %d\n", column0_type, column0_name, column0_value); int column1_type = sqlite3_column_type(stmt, );
const char *column1_name = sqlite3_column_name(stmt, );
const unsigned char *column1_value = sqlite3_column_text(stmt, );
printf("col: 1 type: %d name: %-10s value: %s\n", column1_type, column1_name, column1_value); int column2_type = sqlite3_column_type(stmt, );
const char *column2_name = sqlite3_column_name(stmt, );
int column2_value = sqlite3_column_int(stmt, );
printf("col: 2 type: %d name: %-10s value: %d\n", column2_type, column2_name, column2_value); int column3_type = sqlite3_column_type(stmt, );
const char *column3_name = sqlite3_column_name(stmt, );
const unsigned char *column3_value = sqlite3_column_text(stmt, );
printf("col: 3 type: %d name: %-10s value: %s\n", column3_type, column3_name, column3_value); int column4_type = sqlite3_column_type(stmt, );
const char *column4_name = sqlite3_column_name(stmt, );
double column4_value = sqlite3_column_double(stmt, );
printf("col: 4 type: %d name: %-10s value: %.2f\n", column4_type, column4_name, column4_value); printf("\n");
}
sqlite3_finalize(stmt); // char *zErrMsg = 0;
// sqlite3_stmt *stmt_insert;
// const char *sql_insert = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
// "VALUES (5, 'Logan', 26, 'California', 20000.00 );";
// sqlite3_prepare_v2(db, sql_insert, -1, &stmt_insert, NULL);
// if (sqlite3_step(stmt_insert) != SQLITE_DONE) {
// printf("Insert Table Failed\n");
// sqlite3_free(zErrMsg);
// }
// sqlite3_finalize(stmt_insert); sqlite3_close(db);
return ;
}

参考资料:

sqlite3_prepare_v2 / sqlite3_exec

[转载] Sqlite c/c++ api学习

最新文章

  1. C#开发微信门户及应用(12)-使用语音处理
  2. php基础知识整理
  3. 收拾那掉了一地的session
  4. scala 学习之: list.fill 用法
  5. SQL SERVER 2005/2008 中关于架构的理解(二)
  6. 浅谈SEO-提交(一)
  7. 自动化测试selenium+java 环境搭建
  8. Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
  9. Contractive Auto-Encoder
  10. quick lua 使用spine骨骼动画
  11. tomcat如何按站点调试本机程序
  12. python 模拟浏览器
  13. A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
  14. [转]Android 网络通信框架Volley简介(Google IO 2013)
  15. SQL查询 addScalar()或addEntity()
  16. 织梦不仅是链接到其他调用next
  17. ****Curling 2.0(深搜+回溯)
  18. HBuilder开发App教程04-最难搞定的是mui
  19. php简单实现发微博动态
  20. mybatis 开发环境搭建

热门文章

  1. ubuntu core文件
  2. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)
  3. SQL——语法基础篇(上)
  4. python常用算数运算符、比较运算符、位运算符与逻辑运算符
  5. 15-场景中用到的资源监视器(perfmon metrics collector)
  6. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage
  7. Celery实现周期任务
  8. 068.Python框架Django之DRF视图集使用
  9. Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因
  10. 小小小小小flag