sqlite方法类使用说明-blob数据类型读写操作

本文主要演示sqlite开源项目中的数据库方法类blob数据类型操作使用说明(包括blob数据类型的读操作和写操作等)。本项目旨在分享知识和经验,欢迎广大网友一起加入到开源项目中一起分享贡献知识和经验。

本篇旨在分享接口类的使用,内部原理请参考文章sqlite3数据库之blob数据类型读写

好了,上测试代码:

/******************************************************************************
  > File Name		: samples_write_blob.cpp
  > Author			: Wseldom
  > Mail			: 3235459847@qq.com
  > Created Time	: Thu 30 Nov 2023 10:13:59 PM CST
******************************************************************************/
#include "./samples_write_blob.hpp"
#include "sqlite/sqlite.h"



int samples_write_blob (int argc, char** argv)
{
	char buff1[] = {1,2,3,4,5,6};
	char buff2[] = {7,8,9,10,11,12,13,14};
	class sql::blob* pblob;
	if (argc < 2) {
		printf ("请输入一个参数以指定数据库文件名!\n");
		return -1;
	}
	sql::sqlite db(argv[1]);
	db.exec ("create table if not exists employee("
		"ID INTEGER PRIMARY KEY  AUTOINCREMENT, "
		"NAME           TEXT    NOT NULL UNIQUE, "
		"AGE            INT     NOT NULL, "
		"ADDRESS        CHAR(50), "
		"SALARY         REAL,"
		"image1			BLOB,"
		"image2			BLOB"
	");");
	pblob = new sql::blob(false);
	pblob->add (1, sizeof(buff1), buff1);
	pblob->add (2, sizeof(buff2), buff2);
	db.write_blob ("insert into employee(ID,NAME,AGE,ADDRESS,SALARY,image1,image2)values(NULL,'张三',29,'广州',16000,?,?);", pblob);
	delete pblob;
	buff1[2] = 10;
	buff1[3] = 9;
	buff2[0] = 0;
	buff2[5] = 3;
	pblob = new sql::blob(true);
	pblob->copy (1, sizeof(buff1), buff1);
	pblob->copy (2, sizeof(buff2), buff2);
	db.write_blob ("insert into employee(ID,NAME,AGE,ADDRESS,SALARY,image1,image2)values(NULL,'李四',20,'佛山',10000,?,?);", pblob);
	delete pblob;
	return 0;
}

需要注意的是写操作使用的列索引是从1开始的,并非从0开始,这个地方容易出错!
编译以上代码,执行写入成功,接下来编写读blob数据测试代码以验证写入是否成功。
代码如下:

/******************************************************************************
  > File Name		: samples_read_blob.cpp
  > Author			: Wseldom
  > Mail			: 3235459847@qq.com
  > Created Time	: Thu 30 Nov 2023 10:09:43 PM CST
******************************************************************************/
#include "./samples_read_blob.hpp"
#include "sqlite/sqlite.h"


int samples_read_blob (int argc, char** argv)
{
	class sql::blob* pblob;
	if (argc < 2) {
		printf ("请输入一个参数以指定数据库文件名!\n");
		return -1;
	}
	sql::sqlite db(argv[1]);
	pblob = new sql::blob(true);
	pblob->add (0, 0, NULL);
	pblob->add (1, 0, NULL);
	pblob = db.read_blob ("select image1,image2 from employee where NAME='张三'", pblob);
	if (pblob) {
		int i;
		sqlite_blob_data_t data;
		unsigned char* buff;
		data = pblob->data (0);
		printf ("姓名:张三\n");
		printf ("列号:%d, 长度:%d\n", data.column, data.len);
		buff = (unsigned char*)data.pdata;
		for (i = 0; i < data.len; i++) {
			printf ("%d,", buff[i]);
		}
		printf ("\n");
		data = pblob->data (1);
		buff = (unsigned char*)data.pdata;
		printf ("列号:%d, 长度:%d\n", data.column, data.len);
		for (i = 0; i < data.len; i++) {
			printf ("%d,", buff[i]);
		}
		printf ("\n");
		delete pblob;
	} else {
		printf ("查询失败!\n");
	}
	pblob = new sql::blob(true);
	pblob->add (0, 0, NULL);
	pblob->add (1, 0, NULL);
	pblob = db.read_blob ("select image1,image2 from employee where NAME='李四'", pblob);
	if (pblob) {
		int i;
		unsigned char* buff;
		sqlite_blob_data_t data;
		data = pblob->data (0);
		printf ("李四\n");
		printf ("列号:%d, 长度:%d\n", data.column, data.len);
		buff = (unsigned char*)data.pdata;
		for (i = 0; i < data.len; i++) {
			printf ("%d,", buff[i]);
		}
		printf ("\n");
		data = pblob->data (1);
		buff = (unsigned char*)data.pdata;
		printf ("列号:%d, 长度:%d\n", data.column, data.len);
		for (i = 0; i < data.len; i++) {
			printf ("%d,", buff[i]);
		}
		printf ("\n");
		delete pblob;
	} else {
		printf ("查询失败!\n");
	}
	return 0;
}

运行结果如下:
在这里插入图片描述
实验成功!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值