VC++使用Pro*CC++
几种数据库访问技术的比较
由上所述, Visual C++ 通过以上方法都可以访问Oracle 数据
库, 但是上述方法各有优缺点。ODBC 出现得比较早, 几乎支持所
有的关系型数据库, 而且有MFC 强大的类库支持而使得编程实现
非常方便, 同时可移植性也很强, 在异构的数据库之间移植也只需
更改很少的一部分程序。
但是, 由ODBC 的实现机制我们可以看到, 与Pro*C 相比, 应
用程序需要经过ODBC 驱动程序管理器和ODBC 驱动程序两层才
能和数据库通信接口建立联系, 而Pro*C是直接与通信接口联系,
因此建立在ODBC 上应用程序的执行效率会相对低一些。DAO 对
于访问采用MDB文件格式的数据库, 有着较高的效率, 但对于访问
Oracle 这样的非MDB文件格式的数据库, 必须经过Access/Jet 数据
库引擎, 执行效率低。OLE/DB属于数据库访问技术中的底层接口, 为
了在VisualC++ 中使用OLE/DB, 用户必须熟悉C++ 模板类、COM
技术和OLE/DB接口, 这种要求对一般用户而言比较困难。
ADO 对OLE/DB 的接口作了封装, 定义了ADO 对象, 但它属
于数据库访问的高层接口, 应用程序的执行效率比采用Pro*C 直接
与通信接口联系低。从实现机制上我们可以看到, OO4O 需要通过
个中间层才能和数据库通信接口建立联系, 而Pro*C/ C++ 和OCI
是直接与通信接口联系, 因此建立在PRO*C/ C++ 和OCI 上的
应用程序其执行效率相对高一些。而采用OCI 方法时, 开发人员需
要掌握各种OCI 函数独特的调用语法格式, 所以有时它的实现比
较麻烦。
笔者开发的管理系统是关于期货交易的分析系统, 需要对
交易所交易的海量数据进行实时分析, 监控交易情况。服务端的
服务器安装的操作系统为HP- UNIX, 数据库配置了Oracle9i; 客
户端负责生成分析报表、绘制分析图形等, 采用Windows 经典
界面风格, 用VC++6.0 开发。系统得性能要求要安全、可靠, 并
且在保存有一年数据的情况下, 各项功能操作从提交到完成的
等待时间不能超过30 秒钟。为了满足系统数据量大, 执行效率
高的要求, 我们选择在Visual C++ 环境下采用Pro*C 技术访问
Oracle 数据库。 Pro*C/ C++ 是Oracle 公司提供的在第三代高级程序设计
语言中嵌入SQL 语句来访问数据库的一种预编译程序。VC 程
序员用C 或C++ 语言编写嵌入SQL 语句的Pro*C 预编译源程
序后运行Pro*C/ C++ 预编译器, 把嵌入的SQL 语句转换为标
准的Oracle 调用并生成C/ C++ 源程序, 然后就可以将这些源
程序加入用户的工程文件中, 供其它程序模块调用。PRO*C/
C++ 直接与通信接口联系, 因此执行效率高。与Oracle 调用层接
口开发工具相比, 嵌入式SQL 是通过在C/C++ 程序中直接使用
SQL 语句而不是通过函数调用来进行数据库应用程序开发的,
程序设计人员不必学习和掌握调用层函数接口语法, 因此它是
一种更为简单的程序设计方法。 一个Pro*C 程序有两部分组成: 程序头和程序体。程序头是
Pro*C 的开始部分, 包含宿主变量( SQL 语句中所包含的变量)
说明、通信区定义和C 外部表示符的说明等, 为Pro*C 程序做
一般的准备工作。程序体一般是由若干函数组成, 这些函数内含
有SQL 语句( 以EXEC SQL 起头的语句) , 完成对Oracle 数据库
的操作[]。程序头包括以下3 个部分:
说明部分( DECLARE 节) , 用于定义宿主变量, 实现Oracle
数据库和应用程序之间的通信。其语法为
EXEC SQL BEGIN DECLARE SECTION;
变量定义:
EXEC SQL END DECLARE SECTION;
INCLUDE SQLCA 语句, 用来定义SQL 通讯数据区SQLCA。
SQLCA 可用于错误处理, 它是每个Pro*C 程序用于传递程序信
息的结构。语法为:
EXEC SQL INCLUDE SQLCA
CONNECT部分。该部分用于与Oracle 数据库的连接。语法为:
EXEC SQL CONNECT: usr IDENTIFIDE BY: pwd。 程序体包含有用于检索和操纵存贮在Oracle 数据库中数
据的数据操纵语句( DML) 和用于创建、定义数据结构的数据定
义语句( DDL) []。由于笔者开发的系统中针对每次查询操作都将
返回多行结果, 多次用到游标, 下面主要介绍一下游标的使用。
声明游标:
游标用DECLARE<cursorname>CURSOR FOR SELECT⋯..
其中: <cursorname> 为游标名
打开游标:
声明游标后, 必须在程序引用之前打开它。如下:
OPEN<cursorname> 获取游标:
一个游标与一个SELECT 语句对应, 并且通过游标来获取
SELECT 语句的结果。如果结果为多条记录, 可用一个循环语句
来取得。检索一句的语法如下:
FETCH<cursorname>INTO<variablename1>, <variable name2>
其中: <variablename> 为指定列值变量名。
关闭游标:
处理完一个游标行, 必须释放该游标的系统资源。
CLOSE<cursorname>
在VC 中使用Pro*C 时, 先用Pro*C 编写所需的操作数据
库的子程序, 再运行Pro*C 预编译程序把Pro*C 源程序转换成
相应的CPP 源程序, 将该程序插入到用户工程文件中并在需要
对插入函数进行调用的模块中说明函数, 然后就可以在此模块
中调用所需的函数。
VC++使用Pro*CC++的更多相关文章
- Premiere Pro CC问题集,不断更新
1.Premiere Pro CC不好用? 是的.原因如下: 1.1 Adobe公司不注重用户体验,不注重工作流程,导致这款软件的用户体验很差,设计也很烂.对比Adobe公司当年用户体验最好的软件 F ...
- 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac
[简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...
- AviSynth AVS Importer Plugin for Adobe Premiere Pro CC 2015 x64
Premiere CS AVS Importer x64.prm copy to Adobe\Adobe Premiere Pro CC 2015\Plug-Ins\Common\ VSFilterM ...
- 一、Adobe Premiere Pro CC概述
一.Adobe Premiere Pro CC概述 使用建议 一.开始 二.在Adobe Premiere Pro CC执行非线性编辑 1.标准的视频剪辑工作流 2.使用Premiere增强工作流 p ...
- Adobe Premiere Pro CC ------ 快捷键
ctrl + ~:全屏 Esc:退出全屏
- Premiere Pro cc 2019 下载链接
[安装环境]:win7/win8/win10 [64位下载] 百度网盘链接:pan.baidu.com/s/1mUDK5-CLafUDXn2Rsl-Mjw 提取码:ecx4
- 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
问题:如果使用PR,大概率会遇到导入SRT格式的字幕文件后,PR里面显示的字幕不完整,字幕丢失的问题. 探究:字幕文件的内容正常,导入PR后字幕出现丢失. 查看字幕文件,并测试,发现如下图,如果出现字 ...
- Final Cut Pro X效果插件开发总结
一.介绍 最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理.Final Cut Pro是苹果公司推出的一款视频剪辑软件,因此需要在OSX平 ...
- Adobe Premiere Pro生成峰值文件假死
一.正文 使用Adobe的Premiere Pro CC进行视频剪辑制作的时候,有的时候在右下角总会出现一个“自动生成峰值文件”的提示符,并跟随一个进度条: 大部分时候,这并不会引起什么问题.虽然我也 ...
随机推荐
- Cellebrite UFED 5.1 发布,全面支持三星 S6 S6 Edge Note5 HUAWEI series
世界级取证公司Cellebrite 昨天发布了最新的 UFED 5.1 系统更新,4PC全面支持三星S6,S6EDGE NOTE5 以及HUAWEI,LG系列恢复,锁屏密码XX!下面是部分截图 有需要 ...
- html布局小练习(百度首页)
绝对定位百度首页练习 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- 谷歌 HTML/CSS 规范 2016-12-30
背景 这篇文章定义了 HTML 和 CSS 的格式和代码规范,旨在提高代码质量和协作效率. 通用样式规范 协议 省略图片.样式.脚本以及其他媒体文件 URL 的协议部分(http:,https:),除 ...
- maven 打war包tomcat服务器乱码问题
今天用maven3的命令打war包,命令是mvn clean package -Dmaven.test.skip=true,打包后放在tomcat跑起来后发现tomcat的日志出现乱码. 后来在pom ...
- 利用反射+AOP,封装Basehandler
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...
- React笔记整理
大概大半年时间都在用react写项目,一直在笔记上零零星星地记录着,在新的一年即将到来之际,打算整理整理发出来. 一.React是什么? React是Facebook开源的用于构建用户界面的javas ...
- css3样式二
1.2D转换 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数 如:div{transform: translate(50p ...
- wpf直接绑定xml生成应用程序
目的:在vs2010下用wpf完成一个配置工具,配置文件为xml格式,xml文件作为数据源,直接和wpf前台绑定,生成exe后,运行exe能够加载同路径下的xml配置文件并显示 xml文件在项目中的设 ...
- laravel框架总结(十二) -- 关联关系
这里我们users表对应的模型类名是users,大家特意注意下和user取名的不同 1.一对一关系 1>表A和表B的记录一一对应,比如一个用户对应一个社交账号 数据表的设计如下: 2> ...
- 93、持续集成以及Jenkins的知识介绍
持续集成是什么? }持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程.集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是 ...