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 ...
随机推荐
- Python3发送qq邮件,测试通过
import smtplib from email.mime.text import MIMEText # 收件人列表 mail_namelist = ["10402852@qq.com&q ...
- 稍微谈一下 javascript 开发中的 MVC 模式
随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...
- AC日记——[HNOI2008]GT考试 bzoj 1009
1009 思路: KMP上走DP(矩阵加速): DP[i][j]表示当前在第i位,同是匹配到不吉利串的第j位的方案数: 代码: #include <bits/stdc++.h> using ...
- redis三种连接方式
安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/u ...
- 一个通用的php正则表达式匹配或检测或提取特定字符类
在php开发时,日常不可或缺地会用到正则表达式,可每次都要重新写,有时忘记了某一函数还要翻查手册,所以,抽空写了一个关于日常所用到的正则表达式区配类,便于随便移置调用.(^_^有点偷懒). /*/ ...
- 基于kbengine 0.4.20
前言: v0.0.1 2015-04-10 誉小痕(shawhen2012@hotmail.com) v0.0.2 2015-04-12 誉小痕(shawhen2012@hotmail.com) ch ...
- onethink 路由规则无效问题解决
修改文件 Application/Common/Conf/config.php 打开注释 //'MODULE_ALLOW_LIST' => array('Home','Admin'), // 1 ...
- Unity游戏开发之C#快速入门
C#是微软团队在开发.NET框架时开发的,它的构想接近于C.C++,也和JAVA十分相似,有许多强大的编程功能. 个人感受是C#吸收了众多编程语言的优点,从中可以看到C.C++.Java.Javasc ...
- Bzoj 3498 Cakes(三元环)
题面(权限题就不放题面了) 题解 三元环模板题,按题意模拟即可. #include <cstdio> #include <cstring> #include <vecto ...
- HDU 6162 Ch’s gift (树剖 + 离线线段树)
Ch’s gift Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...