oracle图片大于32k,运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题...

本文主要是介绍oracle图片大于32k,运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前段时间尝试用了ODBC和ADO连接并上传图片都没能超过32K限制,最近用了OO4O终于解决了这个问题。方法及代码如下:

1 下载客户端

ORACLE官方下载链接:http://download.oracle.com/otn/other/ole-oo4o/ODAC101040.exe

2 安装并配置:

解压后,双击/disk/setup.exe,一路下一步,直到出现如下界面,并按图的顺序一路配置:

a15dfd4ed451e6f5d9301a9d48169870.png

图1 直接点下一步

1c93174e9f574879b986436bf822e17f.png

图2  点下一步

859e2c31be024297b77b2510a45e3009.png

图3 在文本内输入服务名

........................

实在贴不动了,依照顺序输入:协议,远程数据库IP,端口,用户名,口令然后点确定,完成 本地NET服务名配置(也可以直接跳过此配置,在以后通过开始->程序->Oracle - OraClient10g_home1->Configuration and Migration Tools->Net Configuration Assistant 工具配置)。

3. 代码:(该代码调试通过)

#include "stdafx.h"

#include

#include

#include

#include

// Example for OParameter, OParamArray Raw example

int main()

{

//Initialize oo4o, connect, execute sql

OStartup();

ODatabase odb("NLV", "NLV_GUEST", "GUEST");

if (!odb.IsOpen())

{

cout <

return 1;

}

else cout << "Connect DataBase OK!" << endl;

//Init Parameters

OParameterCollection params = odb.GetParameters();

OParameter hpzl = params.Add("hpzl", "5", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter hphm = params.Add("hphm", "粤C00009", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter wfsj = params.Add("wfsj", "2008-08-19 09:04:45", OPARAMETER_INVAR, OTYPE_DATE);

OParameter wfxw = params.Add("wfxw", "16037", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter wfdd = params.Add("wfdd", "60108", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter wfdz = params.Add("wfdz", "新增路口", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter cjjg = params.Add("cjjg", "3707860100", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter sjly = params.Add("sjly", "2", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter zplx = params.Add("zplx", "1", 1, OPARAMETER_INVAR, OTYPE_CHAR);

OParameter sbbh = params.Add("sbbh", "37078610045", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter cdbh = params.Add("cdbh", "", OPARAMETER_INVAR, OTYPE_VARCHAR2);

OParameter clsd = params.Add("clsd", 55, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter dcxs = params.Add("dcxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter kcxs = params.Add("kcxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter xcxs = params.Add("xcxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter dczfxs = params.Add("dczfxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter kczfxs = params.Add("kczfxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter xczfxs = params.Add("xczfxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

OParameter zdxs = params.Add("zdxs", 1, OPARAMETER_INVAR, OTYPE_NUMBER);

// write data to BLOB

fstream fs;

fs.open("c://more_than_32k.jpg", ios::in);

fs.setmode(filebuf::binary);

fs.seekg(0, ios::end);

unsigned long filesize = fs.tellg();

fs.seekg(0, ios::beg);

cout <

OBlob b_lob(odb);

unsigned long optchunk = b_lob.GetOptimumChunkSize();

unsigned int bufsize = ((int)(32768/optchunk)) *optchunk;

unsigned char * buffer;

buffer = (unsigned char *)malloc(bufsize);

unsigned long totalwritten = 0;

unsigned long amtread = 0;

int piecetype = OLOB_FIRST_PIECE;

if (filesize <= bufsize)

piecetype = OLOB_ONE_PIECE;

else

b_lob.EnableStreaming(filesize);

while(totalwritten != filesize)

{

fs.read(buffer, bufsize);

amtread = fs.gcount();

b_lob.Write(buffer, amtread, piecetype);

totalwritten = totalwritten + amtread;

if ((filesize - totalwritten)<=bufsize)

piecetype = OLOB_LAST_PIECE;

else

piecetype = OLOB_NEXT_PIECE;

}

b_lob.DisableStreaming();

fs.close();

OParameter zjwj1 = params.Add("zjwj1", b_lob, OPARAMETER_INVAR, OTYPE_BLOB);

OParameter zjwj2 = params.Add("zjwj2", b_lob, OPARAMETER_INVAR, OTYPE_BLOB);

OParameter zjwj3 = params.Add("zjwj3", b_lob, OPARAMETER_INVAR, OTYPE_BLOB);

OParameter zxjg = params.Add("zxjg", 19, OPARAMETER_INOUTVAR, OTYPE_UINT);

OValue oval;

oval.Clear();

zjwj2.SetValue(oval);

zjwj3.SetValue(oval);

unsigned long size = b_lob.GetSize();

printf("blob size = %d/n", size);

oresult r = odb.ExecuteSQL("BEGIN nlv_cache.nlv_package.pro_tgs(:hpzl, :hphm, :wfsj, :wfxw, :wfdd, :wfdz, :cjjg, :sjly, :zplx, :sbbh, :cdbh, :clsd, :dcxs, :kcxs, :xcxs, :dczfxs, :kczfxs, :xczfxs, :zdxs, :zjwj1, :zjwj2, :zjwj3, :zxjg);END;");

if (r == OFAILURE)

{

cout <

return 1;

}

int ret;

zxjg.GetValue(&ret);

printf("ZXJG = %d/n", ret);

odb.Close();

return 0;

}

4. 完成

这篇关于oracle图片大于32k,运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179374

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage