sqlite 二进制字段 (zz)
有时我们用数据库存储文件,需要用到二进制字段,下面列常用方法。
1.写二进制数据
sqlite3 * db;
int result;
char **errmsg =NULL;
result = sqlite3_open("test.db", &db );
if( result != SQLITE_OK )
{ return -1;}
result = sqlite3_exec( db,"create table tb( ID integer, content blob)", NULL, NULL, errmsg);
if(result != SQLITE_OK){printf("erro");}
char *buffer;//要写的二进内容,也可以从文件读出来
buffer=new char[1024*1024];
for(int i=0;i<1024*1024;i++)buffer[i]='a';
sqlite3_stmt *stat;//写二进制数据时要用的结构
sqlite3_prepare( db, "insert into tb( ID, content) values( 10, ? )", -1, &stat, 0 );//准备插入数据
sqlite3_bind_blob( stat, 1, buffer, strlen(buffer), NULL ); //把内容和字段绑定
result=sqlite3_step( stat );//执行
sqlite3_finalize( stat );释放内存
sqlite3_close( db );
2.读二进制数据
这里重点介绍一下sqlite3_blob_open函数
这个函数用于打开二进制字段数据
第一个参数是数据库句柄
第二个参数是数据库名
第三个参数是表名
第四个参数是二进制数据字段(列)名
第五个参数是行数,也就是打开第几行的字段。
第六个
第七个参数是二进制文件句柄
用这个函数打二进制字段就像打开文件一样简单。
下面为例子代码:
sqlite3 * db;
int result;
char **errmsg =NULL;
result = sqlite3_open("test.db", &db );
if( result != SQLITE_OK )
{ return -1;}
int rf= sqlite3_blob_open(db,NULL,"Tbl_2","file_content",1,1,&sqlite3_blob);
if(rf!= SQLITE_OK)return –1;
int len=sqlite3_blob_bytes(sqlite3_blob);//得到二进数据长度
sqlite3_blob_read(sqlite3_blob,buffer,len,0); 读二进数据,最后一个参数为起始位置
//如果不想读全部内容,可以设置这个参数
sqlite3_blob_close(sqlite3_blob);//关闭
sqlite3_close( db );
3.几个问题
a. sqlite3_blob_open函数第五个参数读第几行的数据,不知道通过什么函数能得到当前行的绝对行数,而sqlite3_total_changes函数只能得更改行的相对行数。
b. sqlite3_blob_write函数是用于写二进制数据,但这个函数只能用于修改二进制数据,不能用于插入二进制数据,而写数据的时候长度不能超过第一次插入数据时的长度。
我希望存储的单个二进数据字段可能有几个G的容量,而且随时有可能修改,长度会不断变化,用sqlite3_stmt显然是不行的,而
sqlite3_blob_write函数又不能改变二进数据字段的长度,是我对Sqlite了解的不多,还是这个数据库本身就有这个限制
,希望高手能够指点。
sqlite 二进制字段 (zz)的更多相关文章
- C# asp.net 导出数据库二进制字段到excel
前台的话不多说,本次只详细说下后台导出数据库中的二进制字段,上传下次有时间再说,有比较急的可以留言我 之前在网上搜了关于下载导出二进制字段的资料,发现都不是我想要的,都只是把上传的文件放到服务器然后下 ...
- eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签
功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...
- Sqlite 修改字段的名称。
Sqlite 不支持直接修改字段的名称. 我们可以使用别的方法来实现修改字段名. 1.修改原表的名称 ALTER TABLE table RENAME TO tableOld; 2.新建修改字段后的表 ...
- SQLite中字段顺序和PAGE_SIZE对性能的影响
1.背景 SQLite数据库中有1张表,该表含若干个字段,其中有1个字段为BLOB类型,且BLOB字段不是最后1个字段.表结构类似如下(col3为BLOB字段): T (col1 INTEGER,co ...
- delphi ftBlob二进制字段读取存储
aStream:TMemoryStream; 保存到字段 qrypub.ParamByName('Data').LoadFromStream(aStream, ftBlob); 从字段读取到mem里 ...
- SQLITE 时间字段操作函数
SQLite中的时间日期函数 这是我学习SQLite时做的笔记,参考并翻译了Chris Newman写的<SQLite>中的<Working with Dates and Times ...
- android:Android中用文件初始化sqlite数据库(zz)
很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时, ...
- Android中查看SQLite中字段数据的两种方式
方式一:ADB Pull 通过adb pull导出*.db文件到PC的文件夹中,通过可视化工具 SQLiteExpertPers 进行查看.编辑: adb pull /data/data/com.jo ...
- 关于SQLite数据库 字段 DateTime 类型
这两天刚接触SQLite 数据库 还没有太过于深入的了解 , 于是出现了一个问题 : 我在 C#中 ,使用SQLiteHelper 查询SQLite数据库数据时,报了这个错误: System.Form ...
随机推荐
- LeetCode解题报告—— 2 Keys Keyboard & Longest Palindromic Substring & ZigZag Conversion
1. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- Jquery 学习之路(五)grid绑定模板
最近在使用mvcpager时发现ajax分页需要使用Partial来实现,而且使用起来还是觉得不太方便.突然想自己做一个mvc的ajax分页,但是如果table直接用js输出就不好维护了. angul ...
- python中文ocr方案-pytesseract
pytesseract是google维护的具有学习功能的OCR引擎,3.0以后支持中文识别. 安装: 1. 安装tesseract-ocr组件:记得同步下载简体中文与英文语言包. 2. 安装PIL,需 ...
- HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
解决方案:修改catalina.sh 文件加上-Djava.awt.headless=true JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.awt.hea ...
- redis三种连接方式
安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/u ...
- Codeforces Round #119 (Div. 2) Cut Ribbon(DP)
Cut Ribbon time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- Kali Linux WPScan更新到2.9.3
Kali Linux WPScan更新到2.9.3 WPScan是Kali Linux内置的一款Web漏洞扫描工具,专门扫描WordPress模版构建的网站.该工具最近更新到2.9.3.在新版本中 ...
- 【hihoCoder 第133周】【hihoCoder 1467】2-SAT·hihoCoder音乐节
http://hihocoder.com/problemset/problem/1467 2-sat模板...详细的题解请看题目里的提示. tarjan模板打错again致命伤qwq #include ...
- 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
题意:给你n,m,让你求cos(nx)的展开式的(cos(x))^m项的系数. 更一般的式子是这样的:. 队友的代码: #include<cstdio> #include<algor ...