你好,欢迎来到! 设为首页 收藏本站
联系电话
论文范文 当前位置: > 写作指南 > 论文范文 >

Solaris下PRO*C和OCI程序设计分析与比较(2)

时间:2015-08-31 09:50来源:核心期刊网 作者:核心期刊网 点击:
3.2申请句柄 句柄是指向OCI库所分配的内存区域的指针,该内存区域中的数据由OCI库维护,应用程序可通过句柄访问其中的数据。下面是应用程序中最常用的几个句柄: OCIHandleAlloc((dvoid*)m_envhp,(dvoid**)m_errhp,
  3.2申请句柄
  句柄是指向OCI库所分配的内存区域的指针,该内存区域中的数据由OCI库维护,应用程序可通过句柄访问其中的数据。下面是应用程序中最常用的几个句柄:
  OCIHandleAlloc((dvoid*)m_envhp,(dvoid**)&m_errhp,OCI_HTYPE_ERROR,
  (size_t)0,(dvoid**)0);
  OCIHandleAlloc((dvoid*)m_envhp,(dvoid**)&m_srvhp,OCI_HTYPE_SERVER,
  (size_t)0,(dvoid**)0);
  OCIHandleAlloc((dvoid*)m_envhp,(dvoid**)&m_svchp,OCI_HTYPE_SVCCTX,
  (size_t)0,(dvoid**)0);
  OCIHandleAlloc((dvoid*)m_envhp,(dvoid**)&m_stmthp,OCI_HTYPE_STMT,
  (size_t)0,(dvoid**)0);
  其中m_errhp为新申请的句柄,m_envhp为它的父环境句柄,OCI_HTYPE_ERROR为句柄类型,表示这是一个错误报告句柄,OCI_HTYPE_SERVER表示服务器句柄,OCI_HTYPE_SVCCTX表示服务环境句柄,OCI_HTYPE_STMT表示语句句柄。
  存储在句柄中的数据称为句柄属性,所有OCI句柄都具有属性,可以调用OCIAttrGet()和OCIAttrSet()函数来读取、设置句柄属性。
  3.3连接服务器建立会话
  首先调用OCIServerAttach(m_srvhp,m_errhp,(text*)"",strlen(""),OCI_DEFAULT);函数建立与指定服务器的连接,text*类型变量为空,表示连接默认数据库服务,OCI_DEFAULT表示应用程序的操作模式为阻塞模式,在这种方式下,只有当OCI调用完成后才将控制权返回给客户端应用程序。
  然后调用OCILogon(m_envhp,m_errhp,&m_svchp,(text*)m_szUser,strlen(m_szUser),
  (text*)m_szPassword,strlen(m_szPassword),(text*)m_szDbName,strlen(m_szDbName));建立数据库会话。此函数隐含申请服务器句柄和用户会话句柄,登录后,句柄是只读的,不能再设置句柄属性。
  3.4执行SQL语句并处理数据
  将要执行的SQL语句copy到szSqlStr字符串中,snprintf(szSqlStr,sizeof(szSqlStr),"selectPASSWORDfromUSERSwhereUSERNAME=’chen’");
  执行下列语句:
  OCIStmtPrepare(m_stmthp,m_errhp,(text*)szSqlStr,(ub4)strlen(szSqlStr),
  (ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT);//准备SQL语句
  OCIDefine*defnp0=(OCIDefine*)0;//定义输出变量
  OCIDefineByPos(m_stmthp,&defnp0,m_errhp,1,(dvoid*)szUSERNAME,100,SQLT_STR,
  (dvoid*)0,(ub2*)0,(ub2*)0,OCI_DEFAULT);//绑定变量
  OCIStmtExecute(m_svchp,m_stmthp,m_errhp,(ub4)1,(ub4)0,(OCISnapshot*)NULL,
  (OCISnapshot*)NULL,(ub4)OCI_DEFAULT);//执行SQL语句
  3.5结束会话断开数据库连接
  OCILogoff(m_svchp,m_errhp);
  3.6断开与数据源的连接,释放句柄
  OCIServerDetach(m_srvhp,m_errhp,OCI_DEFAULT);//断开与数据源的连接
  OCIHandleFree((dvoid*)m_stmthp,OCI_HTYPE_STMT);//释放句柄
  OCIHandleFree((dvoid*)m_svchp,OCI_HTYPE_SVCCTX);
  OCIHandleFree((dvoid*)m_srvhp,OCI_HTYPE_SERVER);
  OCIHandleFree((dvoid*)m_errhp,OCI_HTYPE_ERROR)
  3.7生成可执行文件(两种方法)
  (1)同普通的C程序:
  #gcc-oexampled–I.–I$(ORACLE_HOME)/precomp/publicexample.c
  (2)利用Oracle自带的Make文件:
  首先将$ORACLE_HOME/rdbms/demo/demo_rdbms.mk文件copy到OCI源程序所在的目录,将源文件编译为目标文件:#gcc–cexample.o-I$(ORACLE_HOME)/rdbms/demo
  -I$(ORACLE_HOME)/network/public-I$(ORACLE_HOME)/rdbms/public/example.c
  然后用命令:#make-fdemo_rdbms.mkbuildOBJS=example.oEXE=exampled,exampled就为生成的可执行文件。
  4二者的比较
  PRO*C程序的最大优点是简单易学,另外,因为PRO*C程序是把SQL语句翻译成相应的Oracle库函数调用,因此大大提高了应用程序的执行速度。
  OCI程序使开发人员能使用已熟悉的C语言编程技术,通过Oracle的OCI函数调用快速开发应用程序,能充分发挥C语言的特点,使开发人员对程序设计和运行控制更加灵活,开发的应用程序具有更强的数据处理能力和更大的灵活性。
  5结束语
  文章从开发环境、开发流程、编译三个方面分别详细分析了PRO*C和OCI程序设计的方法,并对两者的性能进行了比较。希望能为广大的计算机技术工作者提供参考。由于OCI程序设计相对复杂,以上所述仅是用来实现基本的数据库操作,若要实现更复杂的应用,需要做大量的实践操作,积累经验。文中举例的程序,都是在实际中编译通过了的,更有说服力。
  参考文献
  [1]袁鹏飞著.Oracle数据库8i高级应用开发技术,人民邮电出版社,2000.7
  [2]http://www.oradb.net/book.htm/OracleProC程序设计
  [3]http://www.pgsqldb.org/pgsqldoc-cvs/index.html
  [4]http://www.orafaq.com


  核心期刊网(www.hexinqk.com)秉承“诚以为基,信以为本”的宗旨,为广大学者老师提供投稿辅导、写作指导、核心期刊推荐等服务。
  核心期刊网专业期刊发表机构,为学术研究工作者解决北大核心CSSCI核心统计源核心EI核心等投稿辅导咨询与写作指导的问题。

  投稿辅导咨询电话:18915033935
  投稿辅导客服QQ: 论文投稿1002080872 论文投稿1003158336
  投稿辅导投稿邮箱:1003158336@qq.com
------分隔线----------------------------
栏目列表  
推荐论文  
热点论文  
 
QQ在线咨询
投稿辅导热线:
189-1503-3935
微信号咨询:
18915033935
网站简介 核刊总览 普刊专栏 期刊验证 学术答疑 服务流程 写作指南 支付方式 信用说明 联系我们
CopyRight © 2013 All Rights Reserved.
免责声明:本站提供投稿辅导 论文投稿 投稿辅导 核心期刊检索 核心投稿辅导等服务,本站刊载文章仅代表作者观点
并不意味着本站认同,部分作品系转载,版权归原作者或相应的机构;若某篇作品侵犯您的权利,请来信告知:1003158336@qq.com