C++连接ORacle数据库

1、首先确定安装的oracle数据库是32位的还是64位的,在PLSQL Developer中通过此语句:SQL> select * from v$version;显示如下我的是32位

                                                                            

2、我使用的VS2008在选择Oracle中occi文件选择V8的:E:\Database\Orcal\product\11.2.0\dbhome_1\OCI\lib\MSVC\vc8下的oraocci11.dll,这些文件是安装oracle就有的,不需要再次下载。

3、将OCI文件中的所有文件复制到新建VS2008项目根目录下。

4、点击项目属性:C/C++的常规 附加包含目录下添加:..\ocilib\include,这是添加的是.h文件。

5、下面是我的ConnDB.h文件:

#include "stdafx.h"
//代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了  
#include <iostream>  
#define WIN32COMMON //避免函数重定义错误  
(注:这里引用的是oraocci11.lib只能使用Release不能使用Debug,如果使用Debug要引用oraocci11d.lib,这样引用的目的可以使用相对路径,移动别的电脑不用改变也能用)
#pragma comment(lib, "..\\ocilib\\lib\\MSVC\\vc8\\oraocci11.lib")//加入occi连接库(可以不在链接器依赖输入和附加库目录加入oraocci11.lib)
#include <occi.h>  
#include <time.h>
#include <stdlib.h>

using namespace std;
using namespace oracle::occi;

//表示引用了XP系统提供的ADO接口进行数据库操作

class ConnDB
{
public:
	ConnDB();
	virtual	~ConnDB();
public:
	int	OnInitConnDB();
	void ExitConnect();

public:
	Environment * env;    //上下文件
	Statement *pStmt;   // SQL执行的Statement对象  
	Connection *conn;    //连接数据库	
};
6、下面是我的ConnDB.cpp文件:

// connOrcale.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ConnDB.h"


ConnDB::ConnDB()
{

}

ConnDB::~ConnDB()
{

}
int	ConnDB::OnInitConnDB()
{
	///创建OCCI上下文环境  
	env = Environment::createEnvironment();
	if (NULL == env) {
		printf("createEnvironment error.\n");
		return -1;
	}
	else
		cout << "success" << endl;

	string name = "rfiddata";//数据库用户名
	string pass = "123456";//数据库密码
	string srvName = "localhost:1521/orcl";//数据库服务名,这里使用的是localhost本地连接,如果使用ip的话,需要在oracle中设置
        //E:\Database\Orcal\product\11.2.0\dbhome_1\NETWORK\ADMIN的listener.ora和tnsnames.ora中将(HOST = localhost)该
(HOST = 自己电脑IP)然后再将所有打开服务重启下。


	try
	{
		//创建数据库连接  
		conn = env->createConnection(name, pass, srvName);//用户名,密码,数据库名  
		if (NULL == conn) {
			printf("createConnection error.\n");
			return -1;
		}
		else
			cout << "conn success" << endl;

		//  数据操作,创建Statement对象  
		//Statement *pStmt = NULL;    // Statement对象  
		pStmt = conn->createStatement();
		if (NULL == pStmt) {
			printf("createStatement error.\n");
			return -1;
		}
	}
	catch (SQLException e)
	{
		cout << e.what() << endl;
		system("pause");
		return -1;
	}
	return 0;
}

void	ConnDB::ExitConnect()
{
	// 终止Statement对象    
	conn->terminateStatement(pStmt);

	//  关闭连接  
	env->terminateConnection(conn);
	// pEnv->terminateConnection(pConn);  
	// 释放OCCI上下文环境    
	Environment::terminateEnvironment(env);
	cout << "end!" << endl;
}

7、下面是我的connOrcale.cpp文件:

// connOrcale.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ConnDB.h"

int main()
{
	system("pause");//暂停dos环境
	ConnDB m_ConnDB; //申明连接
        int conn =m_ConnDB.OnInitConnDB();//连接,等于0则连接成功
 	if(conn !=0)//不成功再次连接
	{
           m_ConnDB.OnInitConnDB();
	}
		// 查询数据库时间    
		std::string sno,name,sex;
		int age;
		ResultSet *pRs = m_ConnDB.pStmt->executeQuery(
			"select * from t_user");
		while (pRs->next()) {
			sno = pRs->getString(1);
			name = pRs->getString(2);
			sex = pRs->getString(3);
			age = pRs->getInt(4);
			printf("db time:%s \n", sno.c_str());
			printf("db time:%s \n", name.c_str());
			printf("db time:%s \n", sex.c_str());
			printf("db time:%d \n", age);
			// int类型取值用getInt()    
			//break;
		}
		m_ConnDB.pStmt->closeResultSet(pRs);

		//--------插入---------    
		// 指定DML为自动提交    
		m_ConnDB.pStmt->setAutoCommit(TRUE);
                   string aaa;
		// 设置执行的SQL语句    
		//pStmt->setSQL("INSERT INTO TA (ID, NAME) VALUES (1, 'ZS')");    
		//pStmt->setSQL("insert into t_user(sno, name, sex, age)values('邓超', '99', '41',19)");
              //pStmt->setSQL("insert into t_user(sno, name, sex, age)values('邓超', '99', '“+aaa+”',19)");//变量时得这样才能引用
m_ConnDB.pStmt->setSQL("insert into readertime(rfiddevice, tagid, time)values('192.168.0.160', '123456', '123456')");// 设置执行的SQL语句 // 执行SQL语句 unsigned int nRet = m_ConnDB.pStmt->executeUpdate();if (nRet == 0) {printf("executeUpdate insert error.\n");}m_ConnDB.ExitConnect();system("pause");return 0;}


                                              
成功连接数据获取数据。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值