动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.被关在SQL外面破解SA的密码的方法.
.手工转移数据库Step By Step.
.Oracle数据库管理脚本命名规范.
.Oracle 常用SQL查询列表.
.Oracle数据库技术(29).
.Oracle 数据库函数库.
.Oracle数据字典的介绍与应用实例.
.为什么我的网站只能从局域网里面.
.Linux着作权须知.
.在Linux下的Oracle 用脚本建库实.
.关于block中行数据的存储与空间重.
.ORACLE入门之数据库安全策略.
.如何把数据导入不同的表空间?.
.oracle系统紧急故障处理方法.
.Oracle10G R2(10.2.0.1)在AIX5.2.
.详细讲解如何给导入文件加上时间.
.Oracle 9i新特性研究六(闪回查询).
.oracle 10g重建em db control.
.Oracle临时表 优化查询速度.
.Common Performance Tuning Issu.

用VC开发基于ORACLE数据库方法

发表日期:2008-2-9 |



  1. 引言
  Oracle 公司自1979 年推出基于SQL 标准的关系数据库产品到1997 年版本8 的推出,ORACLE 数据库以其支持大数据库、多用户的高性能事务处理,对业界各项工业标准的支持,完整的安全和完整性控制,支持分布式数据库和分布处理, 具有可移植性、可兼容性和可连接性等突出优点倍受用户喜爱,根据IDG1992 年全球UNIX 数据库的市场报告,ORACLE 占市场销售量的50%。而在客户端的开发工具方面,Visual C++ 也因其强大的功能和高度的灵活性等特点深受广大程序员的喜爱,因此本文旨在介绍使用Visual C++ 开发基于ORACLE 数据库应用程序的两种方法。
  
  2. 使用PRO*C 开发数据库应用
  2.1 PRO*C 工作原理
  PRO 系列是ORACLE 公司提供的在第三代高级程序设计语言中嵌入SQL 语句来访问数据库的一套预编译程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和PRO*PL/I 六种。程序员用相应的高级语言编写嵌入SQL 语句的PRO 源程序(若用C 语言则称为PRO*C 源程序)后运行相应的预编译程序,把嵌入的SQL 语句转换为标准的ORACLE 调用并生成目标源程序,即纯高级语言格式的源程序,然后就可以将这些源程序加入用户的程序中调用,其处理过程如下图。
  
  ORACLE 预编译程序提供如下功能:
  
  ⑴能用六种通用的高级程序设计语言中的任何一种编写应用程序。
  
  ⑵遵循ANSI 标准,在高级语言中嵌入SQL 语句。
  
  ⑶可采用动态SQL 方法,让程序在运行时接受或构造一个有效的SQL 语句。
  
  ⑷实现ORACLE 内部数据类型和高级语言数据类型之间的自动转换。
  
  ⑸可通过在应用程序中嵌入PL/SQL 事物处理块来改进性能。
  
  ⑹能在程序行和命令行上指定所需要的预编译可选项,并可在预编译的过程中改变它们的值。
  
  ⑺能全面检查嵌入的SQL 数据操纵语句和PL/SQL 块的文法和语义。
  
  ⑻可用SQL*Net 并行存取多个地点的ORACLE 数据库。
  
  ⑼可把数组作为输入和输出程序变量使用。
  
  ⑽能对应用程序中的代码段进行条件预编译。
  
  ⑾提供了较强的异常处理功能。
  
  由此可见,通过预编译程序与其它高级语言的结合,既可以利用SQL 强有力的功能和灵活性为数据库应用系统的开发提供强有力的手段,又可以充分利用高级语言自身在系统开发方面的优势,从而提供一个完备的基于ORACLE 数据库应用程序的开发解决方案。
  
  2.2 在VC 中使用PRO*C
  每个PRO*C 源文件一般由程序头和程序体两部分组成。程序头包含宿主变量(SQL 语句中所包含的变量)说明、通讯区定义和C 外部表示符的说明等。程序体一般是由若干函数组成,这些函数内含有SQL 语句(以EXEC SQL 起头的语句)。
  
  PRO*C 支持的数据类型包括VARCHAR2( 变长字符串)、NUMBER( 二进制数)、INTGER( 有符号整数)、FLOAT( 浮点数)、STRING( 以NULL 结尾的字符串)、VARNUM( 变长二进制数)、LONG( 变长字符串)、VARCHAR( 变长字符串)、ROWID( 二进制值)、DATE( 定长日期/ 时间值)、VARRAW( 变长二进制数据)、RAW( 定长二进制数据) 、LONGRAW( 变长二进制数据)、UNSIGNED( 无符号整数)、LONGVARCHAR( 变长字符串)、LONGVARRAW( 变长二进制数据)、CHAR( 定长字符串)、CHARZ(C 中定长以NULL 结尾的字符串)、MLSLABEL( 变长二进制数据)。
  
  在PRO*C 中不能使用'l' 或'u' 作词尾或'0x' 作词头修饰常量;在SQL 语句中使用单引号来定义字符串,用双引号来定义非凡的或小写字符的标识符( 如表名等);SQL 语句中不答应使用C 中的寻址、间接、位逻辑、复合赋值、?=、-、++、%、<<、>> 操作符并且用NOT、AND、OR、= 代替!、&&、、==。
  
  下面的程序是一个联结数据库的PRO*C 源程序例子。
  
  #include < sqlca.h > //声明SQL通讯区
  #include < string.h >
  #include < afxwin.h >
  EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[20]; //声明宿主变量
  VARCHAR passWord[20];
  VARCHAR dbname[20];
  EXEC SQL END DECLARE SECTION;
  void db_connect()
  {
  strcpy((char *)username.arr,"SCOTT");
  username.len = strlen((char *)username.arr);
  strcpy((char *)password.arr,"TIGER");
  password.len = strlen((char *)password.arr);
  strcpy((char *)dbname.arr,"SUNDB");
  dbname.len = strlen((char *)dbname.arr);
  EXEC SQL WHENEVER SQLERROR STOP; //隐式异常处理
  EXEC SQL CONNECT :username
  IDENTIFIED BY :password USING :dbname;
  /*if (sqlca.sqlcode != 0) //显式异常处理
  {
  AfxMessageBox("\n与Oracle数据库连接失败!");
  return;
  }*/
  }
  
  在VC 中使用PRO*C 时,先用PRO*C 编写所需的操作数据库的子程序,再运行PRO*C 预编译程序把PRO*C 源程序转成相应的CPP 源程序,将该程序插入到用户工程文件中并在需要对插入函数进行调用的模块中说明函数,然后就可以在此模块中调用所需的函数。

  
  3. 使用ODBC 中间件访问数据库
  3.1 ODBC 工作原理
  DBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。
  
  ODBC 主要由驱动程序和驱动程序治理器组成。驱动程序是一个用以支持ODBC 函数调用的模块(在WIN95 下通常是一个DLL),每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC 治理程序设定的与相应数据库系统对应的别名即可。驱动程序治理器(包含在ODBC32.DLL 中)可链接到所有ODBC 应用程序中,它负责治理应用程序中ODBC 函数与DLL 中函数的绑定。
  
  ODBC 使用层次的方法来治理数据库,在数据库通信结构的每一层,对可能出现依靠数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。
  
  从结构上分,ODBC 分为单束式和多束式两类。
  
  ⑴单束式驱动程序
  
  单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。
  
  当用户进行数据库操作时,应用程序传递一个ODBC 函数调用给ODBC 驱动程序治理器,由ODBC API 判定该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。
  
  由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。
  
  ⑵多束式驱动程序
  
  多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。
  
  前端应用程序提出对数据库处理的请求,该请求转给ODBC 驱动程序治理器,驱动程序治理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC 驱动程序,再由驱动程序将结果传给应用程序。
  
  3.2 在VC 中使用ODBC
  Visual C++ 中提供了CDatabase、CRecordset、CRecordView、CDBException 和CFieldExchange 五个类,这些类封装了ODBC SDK 函数,从而使用户可以无需了解SDK 函数就可以很方便地操作支持ODBC 的数据库。
  
  CDatabase 类:封装了与数据库建立连接,控制事务的提交和回滚及执行SQL 语句的方法。
  
  CRecordset 类:封装了大部分操纵数据库的方法,包括浏览、修改记录,控制游标移动,排序等操作。
  
  CRecordView 类:提供了与recordset 对象相连接的视,可以建立视中的控件与数据库数据的对应,同时支持移动游标,修改记录等操作。
  
  CDBException 类:提供了对数据库操作的异常处理,可以获得操作异常的相关返回代码。
  
  CFieldExchange 类:提供了用户变量与数据库字段之间的数据交换,假如不需要使用自定义类型,你将不用直接调用该类的函数,MFC Wizard 将自动为程序员建立连接。
  
  4. 两种方法的比较
  综上所述,使用这两种方法在Visual C++ 中都可以很方便地开发出基于ORACLE 数据库的应用程序,同时,这两种方法又各有其优缺点。ODBC 由于有MFC 强大的类库支持而使得编程实现非常方便,同时可移植性也很强,在异构的数据库之间移植也只需更改很少的一部分程序,但是,由ODBC 的实现机制我们可以看到,与PRO*C 相比,应用程序需要经过ODBC 驱动程序治理器和ODBC 驱动程序两层才能和数据库通信接口建立联系,而PRO*C 是直接与通信接口联系,因此建立在ODBC 上应用程序的执行效率会相对低一些。PRO*C 具有执行效率高,支持嵌入式PL/SQL 块等ORACLE 自身特有的优点,但正因为有了这些优点,使
上一篇:用Pro*C开发多线程应用程序 人气:882
下一篇:Oracle中三种上载文件技术(一) 人气:545
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号