C++ 操作oracle 数据库.doc_第1页
C++ 操作oracle 数据库.doc_第2页
C++ 操作oracle 数据库.doc_第3页
C++ 操作oracle 数据库.doc_第4页
C++ 操作oracle 数据库.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库操作方式:可以采用ADO方式,也可以采用oracle本身提供的Proc*C/C+或者是OCCI方式操作数据库。连接方式:可以是客户端连接、也可以是服务器端连接。数据库配置:无论是何种连接都需要进行数据库连接的配置,一般在ORACLE_HOME下面的network/admin/tnsnames.ora文件中进行配置,如果没有此目录或者是此文件,需要自己手工添加。内容格式大致如下:点击(此处)折叠或打开1. BM2D0=2. (DESCRIPTION =3. (ADDRESS_LIST =4. (ADDRESS = (PROTOCOL = TCP)(HOST =XXX.XXX.XXX.XXX)(PORT= 1521)5. )6. (CONNECT_DATA =7. (SERVICE_NAME =BM2D0)8. )9. )其中橄榄色可任意起名,一般在数据库连接是作为服务和用户名、密码一起确定数据库连接的参数。 第一个鲜粉色是远程oracle数据库所在服务器的IP地址,端口号一般为1521。 第二个鲜粉色是远程oracle所在主机的全局数据库名字,不能随意更改。 后两个搭配起来能够确定唯一连接对象。客户端连接:方式一:ADOmain.cpp点击(此处)折叠或打开1. #includeDBOperation.h2. #include3. using namespace std;4.5. void main()6. 7. CDBOperation dbOper;8. bool bConn=dbOper.ConnToDB(Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Data Source=xxx1,xxx2,xxx3);9. if(false=bConn)10. 11. printf(连接数据库出现错误n);12. system(PAUSE);13. return;14. 15.16. _RecordsetPtr pRst;17.18. /执行查询语句19. /char*sql=select * from TSTUDENT;20. char sql255=0;21. strcpy(sql,select * from TSTUDENT);22. pRst=dbOper.ExecuteWithResSQL(sql);23. if(NULL=pRst)24. 25. printf(查询数据出现错误!n);26. system(PAUSE);27. return;28. 29. if(pRst-adoEOF)30. 31. pRst-Close();32. printf(There is no records in this tablen);33. return;34. 35. _variant_t vSno,vName,v*,vAge,vDno,vDname,vCname;36. while(!pRst-adoEOF)37. 38. /pRst-MoveFirst();/记录集指针移动到查询结果集的前面39. vSno=pRst-GetCollect(_variant_t(long)0);40. vName=pRst-GetCollect(_variant_t(name);41. v*=pRst-GetCollect(_variant_t(*);42. vAge=pRst-GetCollect(_variant_t(age);43. /vDno=pRst-GetCollect(dno);44. /vDname=pRst-GetCollect(dname);45. /vCname=pRst-GetCollect(cname);46.47. printf(%st%st%st%dn,(LPSTR)(LPCSTR)(_bstr_t)vSno,(LPSTR)(LPCSTR)_bstr_t(vName),(LPSTR)(LPCSTR)_bstr_t(v*),vAVal);48. pRst-MoveNext();49. 50. 51. /执行插入语句52. /sprintf(sql,insert into TSTUDENT(sno, name, *, age) values(%s, %s, %s, %d),20080016,全局,女,25);53. strcpy(sql,insert into TSTUDENT(sno, name, *, age) values(20080001, 全局, 女, 25);54. pRst=dbOper.ExecuteWithResSQL(sql);55. if(NULL!=pRst)56. 57. printf(插入数据成功n);58. 59. /执行删除语句60. 61. sprintf(sql,delete from TSTUDENT where sno = %s,20080017);62. pRst=dbOper.ExecuteWithResSQL(sql);63. if(NULL!=pRst)64. 65. printf(删除数据成功n);66. 67. system(PAUSE);68. /pRst-Close();69. 其中XXX1:是tnsnames.ora中配置的服务名,XXX2是用户名,XXX3是密码。DBOperation.h:点击(此处)折叠或打开1. #pragma once2. #importc:program filescommon filessystemadomsado15.dllno_namespace rename(EOF,adoEOF)3. classCDBOperation4. 5. public:6. /初始化数据库操作需要的对象7. CDBOperation(void);8. CDBOperation(void);9. /连接至数据库10. bool ConnToDB(char*ConnectionString,char*UserID,char*Password);11.12. /数据库操作函数13. /查询操作 删除以及添加14. _RecordsetPtr ExecuteWithResSQL(constchar*);15. /bool ExecuteNoResSQL(constchar*);/deleteandadd16.17. private:18. void PrintErrorInfo(_com_error&);19.20. private:21. /初始化数据库连接、命令、记录集22. _ConnectionPtr CreateConnPtr();23. _CommandPtr CreateCommPtr();24. _RecordsetPtr CreateRecsetPtr();25.26. private:27. /数据库连接需要的连接、命令操作对象28. _ConnectionPtr m_pConnection;29. _CommandPtr m_pCommand;30. ;DBOperation.cpp点击(此处)折叠或打开1. #includeDBOperation.h2.3. CDBOperation:CDBOperation(void)4. 5. CoInitialize(NULL);6. m_pConnection=CreateConnPtr();7. m_pCommand=CreateCommPtr();8. 9.10. CDBOperation:CDBOperation(void)11. 12. /m_pCommand-Close();13. m_pConnection-Close();14. 15.16. bool CDBOperation:ConnToDB(char*ConnectionString,char*UserID,char*Password)17. 18. if(NULL=m_pConnection)19. 20. printf(Failed to create connectionn);21. returnfalse;22. 23.24. try25. 26. HRESULT hr=m_pConnection-Open(ConnectionString,UserID,Password,NULL);27. if(TRUE=FAILED(hr)28. 29. returnfalse;30. 31. m_pCommand-ActiveConnection=m_pConnection;32. returntrue;33. 34. catch(_com_error&e)35. 36. PrintErrorInfo(e);37. returnfalse;38. 39. 40.41. _RecordsetPtr CDBOperation:ExecuteWithResSQL(constchar*sql)42. 43. /已经在连接至数据库的时候进行判断了44. /if(NULL=m_pCommand|0=m_pConnection-State)45. /46. /printf(Failed to create command OR the state of connection is zeron);47. /returnNULL;48. /49.50. /char*query=new char;51. /strcpy(query,sql);52. try53. 54. m_pCommand-CommandText=_bstr_t(sql);55. _RecordsetPtr pRst=m_pCommand-Execute(NULL,NULL,adCmdText);56. return pRst;57. /_variant_t ra;58. /_RecordsetPtr pRst=m_pConnection-Execute(_bstr_t)query,&ra,adCmdText);59. 60. catch(_com_error&e)61. 62. PrintErrorInfo(e);63. returnNULL;64. 65. 66.67. /bool CDBOperation:ExecuteNoResSQL(constchar*sql)68. /69. /if(NULL=m_pCommand|0=m_pConnection-State)70. /71. /printf();72. /73. /try74. /75. /char*query=NULL;76. /strcpy(query,sql);77. /m_pCommand-CommandText=(_bstr_t)query;78. /79. /80. /81.82. void CDBOperation:PrintErrorInfo(_com_error&e)83. 84. printf(Error infomation are as followsn);85. printf(ErrorNo: %dnError Message:%snError Source:%snError Description:%sn,e.Error(),e.ErrorMessage(),(LPCTSTR)e.Source(),(LPCTSTR)e.Description();86. 87.88. _ConnectionPtr CDBOperation:CreateConnPtr()89. 90. HRESULT hr;91. _ConnectionPtr connPtr;92. hr=connPtr.CreateInstance(_uuidof(Connection);93. if(FAILED(hr)=TRUE)94. 95. returnNULL;96. 97. return connPtr;98. 99.100. _CommandPtr CDBOperation:CreateCommPtr()101. 102. HRESULT hr;103. _CommandPtr commPtr;104. hr=commPtr.CreateInstance(_uuidof(Command);105. if(FAILED(hr)=TRUE)106. 107. returnNULL;108. 109. return commPtr;110. 111.112. _RecordsetPtr CDBOperation:CreateRecsetPtr()113. 114. HRESULT hr;115. _RecordsetPtr recsetPtr;116. hr=recsetPtr.CreateInstance(_uuidof(Command);117. if(FAILED(hr)=TRUE)118. 119. returnNULL;120. 121. return recsetPtr;122. 方式二:OCCI默认oracle安装了occi库,但是只是安装了release版本的资源,因此需要将程序配置为release模式,或者是参看/article-42057-1.html为debug模式获取必备的头文件以及库文件,本文采用的是release模式,使用默认安装的库文件以及头文件。1.修改配置属性 改为Rlease模式2.添加库文件目录 $(ORACLE_HOME)ociinclude3.添加头文件目录 $(ORACLE_HOME)ocilib4.添加库文件:oraocci10.lib应用程序:点击(此处)折叠或打开1. /代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了2. #include3. #define WIN32COMMON /避免函数重定义错误4. #include5. using namespace std;6. using namespace oracle:occi;7. intmain()8. 9. Environment*env=Environment:createEnvironment();10. coutsuccesscreateConnection(bsm3,bsm3,BSM3);18. coutconn successterminateConnection(conn);20. 21. catch(SQLException e)22. 23. coute.what()endl;24. system(pause);25. return-1;26. 27.28. Environment:terminateEnvironment(env);29. coutend!endl;30. system(pause);31. return 0;32. 服务器端:AIX服务器方式一:OCCIhelloworld.cpp点击(此处)折叠或打开1. /代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了2. #include3. #include4. using namespace std;5. using namespace oracle:occi;6. main()7. 8. Environment*env=Environment:createEnvironment();9. coutsuccesscreateConnection(name,pass,srvName);17. coutconn successterminateConnection(conn);19. 20. catch(SQLException e)21. 22. coute.what()endl;23. 24.25. Environment:terminateEnvironment(env);26. coutend!endl;27. Makefile:点击(此处)折叠或打开1. #2. #Makefileforthe OCCI demo programs3. #4. INC=-I$ORACLE_HOME/precomp/public-I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论