SQLite使用(二)
2024-08-26 01:57:12
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学习
最新文章
- C#开发微信门户及应用(12)-使用语音处理
- php基础知识整理
- 收拾那掉了一地的session
- scala 学习之: list.fill 用法
- SQL SERVER 2005/2008 中关于架构的理解(二)
- 浅谈SEO-提交(一)
- 自动化测试selenium+java 环境搭建
- Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
- Contractive Auto-Encoder
- quick lua 使用spine骨骼动画
- tomcat如何按站点调试本机程序
- python 模拟浏览器
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
- [转]Android 网络通信框架Volley简介(Google IO 2013)
- SQL查询 addScalar()或addEntity()
- 织梦不仅是链接到其他调用next
- ****Curling 2.0(深搜+回溯)
- HBuilder开发App教程04-最难搞定的是mui
- php简单实现发微博动态
- mybatis 开发环境搭建
热门文章
- ubuntu core文件
- 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)
- SQL——语法基础篇(上)
- python常用算数运算符、比较运算符、位运算符与逻辑运算符
- 15-场景中用到的资源监视器(perfmon metrics collector)
- AJ学IOS(55)多线程网络之图片下载框架之SDWebImage
- Celery实现周期任务
- 068.Python框架Django之DRF视图集使用
- Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因
- 小小小小小flag