在线客服系统

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

时间:2015-08-31 09:50 来源:发表吧 作者:发表吧编辑 点击:
  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.fabiaoba.com),是一个专门从事期刊推广期刊发表、投稿辅导、发表期刊的网站。
  本站提供如何投稿辅导、发表期刊,寻求论文刊登合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级论文刊登/国家级论文刊登/ CSSCI核心/医学投稿辅导/职称投稿辅导。

投稿邮箱:fabiaoba365@126.com
 在线咨询: 投稿辅导275774677投稿辅导1003180928
 在线咨询: 投稿辅导610071587投稿辅导1003160816
 联系电话:13775259981

其它期刊

联系方式
李老师QQ:发表吧客服610071587 陈老师QQ:发表吧客服275774677 刘老师QQ:发表吧客服1003160816 张老师QQ:发表吧客服1003180928 联系电话:18796993035 投稿邮箱:fabiaoba365@126.com
期刊鉴别
热门期刊
发表吧友情提醒

近来发现有些作者论文投稿存在大量剽窃、抄袭行为,“发表吧”对此类存在大量剽窃、抄袭的论文已经停止编辑、推荐。同时我们也提醒您,当您向“发表吧”投稿时请您一定要保证论文的原创性、唯一性,这既是对您自己负责,更是对他人的尊敬。

此类投稿的论文如果发表之后,对您今后的人生和事业将造成很大的麻烦,后果不堪设想,请您一定要慎重,三思而后行。

如因版权问题引起争议或任何其他原因,“发表吧”不承担任何法律责任,侵权法律责任概由剽窃、抄袭者本人承担。

 
QQ在线咨询
陈老师:275774677
张老师:1003180928
李老师:610071587
刘老师:1003160816
论文刊登热线:
137-7525-9981
微信号咨询:
fabiaoba-com

友情链接

申请链接