C++操作oracle数据库
点击(此处)折叠或打开
- BM2D0 =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVICE_NAME = BM2D0)
- )
- )
客户端连接:
点击(此处)折叠或打开
- #include "DBOperation.h"
- #include <iostream>
- using namespace std;
- void main()
- {
- CDBOperation dbOper;
- bool bConn = dbOper.ConnToDB("Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Data Source=xxx1", "xxx2", "xxx3");
- if (false == bConn)
- {
- printf("连接数据库出现错误\n");
- system("PAUSE");
- return;
- }
- _RecordsetPtr pRst;
- //执行查询语句
- //char *sql = "select * from TSTUDENT";
- char sql[255] = {0};
- strcpy(sql, "select * from TSTUDENT");
- pRst = dbOper.ExecuteWithResSQL(sql);
- if (NULL == pRst)
- {
- printf("查询数据出现错误!\n");
- system("PAUSE");
- return;
- }
- if (pRst->adoEOF)
- {
- pRst->Close();
- printf("There is no records in this table\n");
- return;
- }
- _variant_t vSno, vName, v***, vAge, vDno, vDname, vCname;
- while (!pRst->adoEOF)
- {
- //pRst->MoveFirst(); //记录集指针移动到查询结果集的前面
- vSno = pRst->GetCollect(_variant_t((long)0));
- vName = pRst->GetCollect(_variant_t("name"));
- v*** = pRst->GetCollect(_variant_t("***"));
- vAge = pRst->GetCollect(_variant_t("age"));
- //vDno = pRst->GetCollect("dno");
- //vDname = pRst->GetCollect("dname");
- //vCname = pRst->GetCollect("cname");
- printf("%s\t%s\t%s\t%d\n", (LPSTR)(LPCSTR)(_bstr_t)vSno, (LPSTR)(LPCSTR)_bstr_t(vName), (LPSTR)(LPCSTR)_bstr_t(v***), vAge.intVal);
- pRst->MoveNext();
- }
- //执行插入语句
- //sprintf(sql, "insert into TSTUDENT(sno, name, ***, age) values('%s', '%s', '%s', %d)", "20080016", "全局", "女", 25);
- strcpy(sql, "insert into TSTUDENT(sno, name, ***, age) values('20080001', '全局', '女', 25)");
- pRst = dbOper.ExecuteWithResSQL(sql);
- if (NULL != pRst)
- {
- printf("插入数据成功\n");
- }
- //执行删除语句
- sprintf(sql, "delete from TSTUDENT where sno = '%s'", "20080017");
- pRst = dbOper.ExecuteWithResSQL(sql);
- if (NULL != pRst)
- {
- printf("删除数据成功\n");
- }
- system("PAUSE");
- //pRst->Close();
- }
其中XXX1:是tnsnames.ora中配置的服务名,XXX2是用户名,XXX3是密码。
点击(此处)折叠或打开
- #pragma once
- #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
- class CDBOperation
- {
- public:
- //初始化数据库操作需要的对象
- CDBOperation(void);
- ~CDBOperation(void);
- //连接至数据库
- bool ConnToDB(char *ConnectionString, char *UserID, char *Password);
- //数据库操作函数
- //查询操作 删除以及添加
- _RecordsetPtr ExecuteWithResSQL(const char *);
- //bool ExecuteNoResSQL(const char *);//delete and add
- private:
- void PrintErrorInfo(_com_error &);
- private:
- //初始化数据库连接、命令、记录集
- _ConnectionPtr CreateConnPtr();
- _CommandPtr CreateCommPtr();
- _RecordsetPtr CreateRecsetPtr();
- private:
- //数据库连接需要的连接、命令操作对象
- _ConnectionPtr m_pConnection;
- _CommandPtr m_pCommand;
- };
点击(此处)折叠或打开
- #include "DBOperation.h"
- CDBOperation::CDBOperation(void)
- {
- CoInitialize(NULL);
- m_pConnection = CreateConnPtr();
- m_pCommand = CreateCommPtr();
- }
- CDBOperation::~CDBOperation(void)
- {
- //m_pCommand->Close();
- m_pConnection->Close();
- }
- bool CDBOperation::ConnToDB(char *ConnectionString, char *UserID, char *Password)
- {
- if (NULL == m_pConnection)
- {
- printf("Failed to create connection\n");
- return false;
- }
- try
- {
- HRESULT hr = m_pConnection->Open(ConnectionString, UserID, Password, NULL);
- if (TRUE == FAILED(hr))
- {
- return false;
- }
- m_pCommand->ActiveConnection = m_pConnection;
- return true;
- }
- catch(_com_error &e)
- {
- PrintErrorInfo(e);
- return false;
- }
- }
- _RecordsetPtr CDBOperation::ExecuteWithResSQL(const char *sql)
- {
- //已经在连接至数据库的时候进行判断了
- //if (NULL == m_pCommand || 0 == m_pConnection->State)
- //{
- // printf("Failed to create command OR the state of connection is zero\n");
- // return NULL;
- //}
- //char *query = new char;
- //strcpy(query, sql);
- try
- {
- m_pCommand->CommandText = _bstr_t(sql);
- _RecordsetPtr pRst = m_pCommand->Execute(NULL, NULL, adCmdText);
- return pRst;
- //_variant_t ra;
- //_RecordsetPtr pRst = m_pConnection->Execute((_bstr_t)query, &ra, adCmdText);
- }
- catch(_com_error &e)
- {
- PrintErrorInfo(e);
- return NULL;
- }
- }
- //bool CDBOperation::ExecuteNoResSQL(const char *sql)
- //{
- // //if (NULL == m_pCommand || 0 == m_pConnection->State)
- // //{
- // // printf();
- // //}
- // try
- // {
- // char *query = NULL;
- // strcpy(query, sql);
- // m_pCommand->CommandText = (_bstr_t)query;
- //
- // }
- //}
- void CDBOperation::PrintErrorInfo(_com_error &e)
- {
- printf("Error infomation are as follows\n");
- printf("ErrorNo: %d\nError Message:%s\nError Source:%s\nError Description:%s\n", e.Error(), e.ErrorMessage(), (LPCTSTR)e.Source(), (LPCTSTR)e.Description());
- }
- _ConnectionPtr CDBOperation::CreateConnPtr()
- {
- HRESULT hr;
- _ConnectionPtr connPtr;
- hr = connPtr.CreateInstance(__uuidof(Connection));
- if (FAILED(hr) == TRUE)
- {
- return NULL;
- }
- return connPtr;
- }
- _CommandPtr CDBOperation::CreateCommPtr()
- {
- HRESULT hr;
- _CommandPtr commPtr;
- hr = commPtr.CreateInstance(__uuidof(Command));
- if (FAILED(hr) == TRUE)
- {
- return NULL;
- }
- return commPtr;
- }
- _RecordsetPtr CDBOperation::CreateRecsetPtr()
- {
- HRESULT hr;
- _RecordsetPtr recsetPtr;
- hr = recsetPtr.CreateInstance(__uuidof( Command));
- if (FAILED(hr) ==TRUE)
- {
- return NULL;
- }
- return recsetPtr;
- }
点击(此处)折叠或打开
- //代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了
- #include <iostream>
- #define WIN32COMMON //避免函数重定义错误
- #include <occi.h>
- using namespace std;
- using namespace oracle::occi;
- int main()
- {
- Environment *env=Environment::createEnvironment();
- cout<<"success"<<endl;
- string name = "xxx";
- string pass = "xxx";
- string srvName = "xxx";
- try
- {
- Connection *conn = env->createConnection("bsm3", "bsm3", "BSM3");
- cout<<"conn success"<<endl;
- env->terminateConnection(conn);
- }
- catch(SQLException e)
- {
- cout<<e.what()<<endl;
- system("pause");
- return -1;
- }
- Environment::terminateEnvironment(env);
- cout<<"end!"<<endl;
- system("pause");
- return 0;
- }
服务器端:AIX服务器
点击(此处)折叠或打开
- //代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了
- #include <iostream>
- #include <occi.h>
- using namespace std;
- using namespace oracle::occi;
- main()
- {
- Environment *env=Environment::createEnvironment();
- cout<<"success"<<endl;
- string name = "xxx";
- string pass = "xxx";
- string srvName = "xxx";
- try
- {
- Connection *conn = env->createConnection(name, pass, srvName);
- cout<<"conn success"<<endl;
- env->terminateConnection(conn);
- }
- catch(SQLException e)
- {
- cout<<e.what()<<endl;
- }
- Environment::terminateEnvironment(env);
- cout<<"end!"<<endl;
- }
Makefile:
点击(此处)折叠或打开
- ###########################################
- #Makefile for the OCCI demo programs
- ###########################################
- INC=-I${ORACLE_HOME}/precomp/public -I${ORACLE_HOME}/rdbms/public
- LIB=-L${ORACLE_HOME}/lib -locci #-bnoquiet #-bloadmap
- FLAGS=-q64 -g
- #为方便取下面三个变量,目标为helloworld,源文件是helloworld.cpp,编译后文件helloworld.o
- PRG=helloworld
- SRC=helloworld.cpp
- OBJ=helloworld.o
- #下面是常规的makefile内容,$@表示依次取目标执行,这里只有helloworld一个目标。实际等价于
- #CC -o helloworld helloworld.o 不过加入了include和lib文件。而helloworld.o需要后续完成
- $(PRG):$(OBJ)
- @echo "begin link......"
- ${CC} ${FLAGS} ${INC} ${LIB} -o $@ $(OBJ)
- #helloworld目标依赖helloworld.o生成,所以该句就是编译.c生成.o文件。只不过加入了include和lib文件
- $(OBJ):$(SRC)
- @echo "begin compile......"
- ${CC} ${FLAGS} ${INC} ${LIB} -c $(SRC)
- #后面的内容不是make的内容了,而是make clean内容。比如想重新make之前,清除.o等文件,执行make clean语句
- #.PRNOY语句表明 clean关键词是个伪目标。make不自动执行。
- .PRONY:clean
- clean:
- @echo "Removing linked and compiled files....."
- rm -f $(OBJ) $(PRG)
关于客户端以及服务器端采用PROC*C/C++连接方式待续。。。。
C++操作oracle数据库的更多相关文章
- ASP.NET操作ORACLE数据库之模糊查询
ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
- PHP操作Oracle数据库
原文出处 (这是来自“百度文库”中的文章写得很不错) PHP操作Oracle数据库(OCI数据抽象层)OCI(Oracle 8 Call-Interface)是PHP中内置的数据库抽象层函数.下面针对 ...
- Python使用cx_Oracle模块连接操作Oracle数据库
1. 简单介绍 cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包含 Oracle 9.2 10.2 以及 11.1 等版本号 2.安装 最好是去官网h ...
- Java java jdbc thin远程连接并操作Oracle数据库
JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...
- loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...
- 使用ADO.NET操作Oracle数据库
本文将示例使用C#的ADO.NET技术调用Oralce的存储过程和函数及操作Oracle数据库. 在oracle的hr数据库中建立存储过程 在oralce的hr数据库中建立函数 新建控制台项目,在主函 ...
- 连接Linux服务器操作Oracle数据库
连接Linux服务器操作Oracle数据库 由于项目已经上线,现场的数据库服务器不允许直接用Oracle的客户端plsqldev.exe来连接,只能通过Linux服务器的命令来操作. 以下是用Se ...
- 在shell终端操作oracle数据库的常用命令
这里面是在一个项目中用到的操作oracle数据库的常用linux命令,因为当时无法用plsql远程连接,大部分操作都需要在命令行窗口进行,总结一下 第一种方式 (1)先切换至sqlplus [orac ...
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
随机推荐
- 一次聊天引发的思考--java并发包
一次聊天,谈到了死锁的解决.可重入锁等等,突然发现这些离自己很远,只有一些读书时的概念涌入脑海,但各自的应用场景怎么都无法想出.痛定思痛,决定看看concurrent包里涉及并发的类及各自的应用场景. ...
- SCCM2012 R2实战系列之四:初始化配置
在之前的文章中,我们已经完成了SCCM 2012 R2 独立主站点的部署.为了客户端代理软件的顺利安装和OSD操作系统的分发,我们需要配置组策略及DHCP服务.在本系列的第四部分,跟大家一起分享下如何 ...
- [深度分析] Python Web 开发框架 Bottle
[深度分析] Python Web 开发框架 Bottle(这个真的他妈的经典!!!) 作者:lhf2009913 Bottle 是一个非常精致的WSGI框架,它提供了 Python Web开发中需要 ...
- 汽车车牌JS正则表达式验证(含新能源车牌)
/** * 第一:普通汽车 * 车牌号格式:汉字 + A-Z + 5位A-Z或0-9( 车牌号不存在字母I和O防止和1.0混淆) * (只包括了普通车牌号,教练车,警等车牌号 .部分部队车,新能源不包 ...
- Hive UDF作业
说到这次作业,看似简单的几个步骤,对于我这样的菜鸟来说可真是一波三折啊.下面来说说这次的步骤和我遇到的问题. 首先准备工作,搭建好hive环境,保证hadoop集群是启动的.这个就不多说了. 第一步: ...
- KVM总结-KVM性能优化之磁盘IO优化
前面讲了KVM CPU(http://blog.csdn.net/dylloveyou/article/details/71169463).内存(http://blog.csdn.net/dyllov ...
- JMeter性能(压力)测试--使用解锁
1. 首先去官网下载JMeter: http://jmeter.apache.org/download_jmeter.cgi 2. 解压缩后到目录 \apache-jmeter-5.0\bin 下找 ...
- spring揭密学习笔记
spring揭密学习笔记 spring揭密学习笔记(1) --spring的由来 spring揭密学习笔记(2)-spring ioc容器:IOC的基本概念
- [Unity动画]02.动画播放
参考链接: http://www.cnblogs.com/hont/p/5100472.html 上一篇是直接通过界面来控制动作的播放,这篇将使用脚本去管理对象的动作 API解析: Animator. ...
- elasticssearch+kibanna入门(撰写中)
看到一篇elasticssearch+kibanna的文章,觉得很好,不过例子是python的,所以使用java自己安装一下: https://mp.weixin.qq.com/s?__biz=MjM ...