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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序