使用oo4o已经是很多年的事情了,前段时间有同事使用这个东西往oracle中添加图片等blob数据,一直找不到方法。经本人测试,找到一个很简单的方法,现记录如下。
过程就是先添加一个空的blob数据,然后再去修改这个blob数据,在oracle的oo4o的workbook中,也采用了这种方式,不过是源代码的blob填充数据没有使用copyFromFile的方法,而是采用数据读写,这相对于日常存照片文件,还是过于繁琐。本段代码直接使用copyFromFile,简单一点。代码总共不超过10行(核心代码)。
#include "stdafx.h" #include "obound.h" #include "ORACL.H" #includeusing namespace std; //oracle定义了表为xa,两个字段id和vv,其中id为主键,vv为blob类型。 OStartup();//启动,必须要 ODatabase x; //打开数据库 x.Open("tnsname", "用户名", "密码"); //取得一个结果集,这个结果集没数据,为了添加使用的 ODynaset os(x,"select id,vv from xa where 1 = 0");//专门使用1=0不查询任何数据 os.AddNewRecord(); os.SetFieldValue("id",i); OValue ov; ov.SetEmpty(); os.SetFieldValue("vv", ov); os.Update(); //以上为添加一个图片为空的记录,下面准备添加图片了。 os.StartEdit(); OBlob ob; os.GetFieldValue("vv", &ob);//读取数据 ob.CopyFromFile("d:/x.jpg");//将文件写入blob os.Update(); ob.Close();//关闭blob,必须调用,否则在oshutdown之后,会出现内存出错 os.Close();//关闭记录集 x.Close();//关闭会话 OShutdown();
以上代码相当简单,需要注意的是,由于oracle把所有权力都交由了开发者,开发者必须在分配内存之后,关闭内存。否则就会在运行时出现"内存报错"的情况。以上的close方法,一个都不能少,少一个都会报错,需要注意。
以上代码,在vs2005下运行通过
转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201204200001.html