sqlite3编程—处理二进制blob
来源:互联网 发布:杭州正规淘宝运营公司 编辑:程序博客网 时间:2024/06/18 07:56
#include "sqlite3.h"#include <stdio.h>#include <string.h>#include <errno.h>#define DEMO_DB "/tmp/demo.db"#define DEMO_TABLE "bb"struct employee_s { int empno; char ename[32]; char job[16]; int deptno;};int sqlite3_db_blob_insert(){ sqlite3 *db = NULL; sqlite3_stmt *stmt = NULL; char sql[1024]; int ret = 0; struct employee_s emp = {1, "tom", "programmer", 1035}; ret = sqlite3_open(DEMO_DB, &db); if (ret != SQLITE_OK) { fprintf(stderr, "db open fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } memset(sql, 0, sizeof(sql)); sprintf(sql, "insert into %s values(?, ?)", DEMO_TABLE); printf("sql select: \"%s\"\n", sql); ret = sqlite3_prepare(db, sql, strlen(sql), &stmt, NULL); if (ret != SQLITE_OK) { fprintf(stderr, "db prepare fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } /* 绑定id值 */ ret = sqlite3_bind_int(stmt, 1, 1001); if (ret != SQLITE_OK) { fprintf(stderr, "db bind fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } /* 绑定content值 */ ret = sqlite3_bind_blob(stmt, 2, &emp, sizeof(emp), NULL); if (ret != SQLITE_OK) { fprintf(stderr, "db bind fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } ret = sqlite3_step(stmt); if (ret != SQLITE_DONE) { fprintf(stderr, "db insert fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } sqlite3_finalize(stmt); return 0;}int sqlite3_db_blob_select(){ sqlite3 *db = NULL; sqlite3_stmt *stmt = NULL; char sql[1024]; int ret = 0; ret = sqlite3_open(DEMO_DB, &db); if (ret != SQLITE_OK) { fprintf(stderr, "db open fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } memset(sql, 0, sizeof(sql)); sprintf(sql, "select id, content from %s", DEMO_TABLE); printf("sql select: \"%s\"\n", sql); ret = sqlite3_prepare(db, sql, strlen(sql), &stmt, NULL); if (ret != SQLITE_OK) { fprintf(stderr, "db prepare fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } for ( ; ; ) { ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { int id, len; void *content = NULL; struct employee_s *emp = NULL; int empno, deptno; char ename[32], job[16]; /* 索引从0开始 */ id = sqlite3_column_int(stmt, 0); content = (void *)sqlite3_column_blob(stmt, 1); len = sqlite3_column_bytes(stmt, 1); emp = (struct employee_s *)content; empno = emp->empno; strcpy(ename, emp->ename); strcpy(job, emp->job); deptno = emp->deptno; printf("len=%d, sizeof(employee_s)=%d\n", len, sizeof(struct employee_s)); printf("id=%d, empno=%d, ename=%s, job=%s, deptno=%d\n", id, empno, ename, job, deptno); } else if (ret == SQLITE_DONE) { printf("select done!\n"); break; } else { fprintf(stderr, "db step fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); break; } } sqlite3_finalize(stmt); return 0;}int sqlite3_db_table_exist(char *dbfile, const char *tablename){ sqlite3 *db = NULL; sqlite3_stmt *stmt = NULL; char sql[1024]; int ret = 0, rows = 0; ret = sqlite3_open(dbfile, &db); if (ret != SQLITE_OK) { fprintf(stderr, "db open fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return 0; } memset(sql, 0, sizeof(sql)); sprintf(sql, "select count(1) from sqlite_master where type='table' and name='%s'", tablename); ret = sqlite3_prepare(db, sql, strlen(sql), &stmt, NULL); if (ret != SQLITE_OK) { fprintf(stderr, "db prepare fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { rows = sqlite3_column_int(stmt, 0); } else if (ret == SQLITE_DONE) { printf("no data!\n"); rows = 0; } else { fprintf(stderr, "db step fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); rows = 0; } sqlite3_finalize(stmt); sqlite3_close(db); if (rows > 0) { return 1; } else { return 0; }}int sqlite3_db_create(){ sqlite3 *db = NULL; char sql[1024]; char *errmsg = NULL; int ret = 0; if (sqlite3_db_table_exist(DEMO_DB, DEMO_TABLE)) { printf("table exist\n"); return 0; } ret = sqlite3_open(DEMO_DB, &db); if (ret != SQLITE_OK) { fprintf(stderr, "db open fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_close(db); return -1; } memset(sql, 0, sizeof(sql)); sprintf(sql, "create table %s ("\ "id int(4) not null, "\ "content blob)", DEMO_TABLE); printf("sql create: \"%s\"\n", sql); ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg); if (ret != SQLITE_OK) { fprintf(stderr, "create table fail, errcode[%d], errmsg[%s]\n", ret, sqlite3_errmsg(db)); sqlite3_free(errmsg); errmsg = NULL; sqlite3_close(db); return -1; } sqlite3_close(db); return 0;}int main(){ sqlite3_db_create(); sqlite3_db_blob_insert(); sqlite3_db_blob_select(); return 0;}
0 0
- sqlite3编程—处理二进制blob
- SQLITE3 读写二进制字段blob
- Sqlite3数据块以BLOB字段存储二进制数据块
- 数据库中使用Blob处理二进制数据
- SQlite3 二进制数据(BLOB)的存取【基于wxSqlite3的封装的操作】
- ArcGIS BLOB—大二进制类型
- 使用 SQLite3 访问Blob字段
- 使用 SQLite3 访问Blob字段
- Sqlite3 操作二进制数据
- sqlite3 二进制读取
- sqlite3 读写二进制数据
- BLOB二进制对象(blob.c/h)
- java数据库编程--处理大对象数据(Blob类)
- 对文件进行二进制的循环处理时byte[ ]比blob更有效率
- Spring+Hibernate中处理Oracle的大字段(clob二进制\blob大字符串)
- JDBC — 处理BLOB类型数据
- sqlite3编程
- DB blob二进制流转化
- 2017阿里实习生招聘编程题之相亲约会
- 关于jquery的$.ajax的基本用法总结
- 189. Rotate Array
- 分类系列之感知器学习算法PLA 和 口袋算法Pocket Algorithm
- 如何解决在使用Eclipse在配置xml文件时,xml文件底部不出现namespace等选项。
- sqlite3编程—处理二进制blob
- 在Windows上安装Python以及Numpy、Matplotlib等模块
- Linux 上 GDM 登录界面如何适应高分屏
- OpenGL由FOVY计算FOVX
- 计算机网络面试题
- JavaScript简介与基本语法
- 微服务
- 湖大C语言设计题6
- SpringBoot非官方教程 | 第七篇:springboot开启声明式事务