C++使用ocilib访问oracle数据库

测试程序我放到 http://download.csdn.net/detail/u011311985/9499596这个地址中了,有需要的朋友可以下载

一、下载客户端驱动说明

参考网址:

使用ocilib;
http://wenku.baidu.com/link?url=9pHYVD-MEq00_a0E80gzm3fHf7pICM0KsWrrgYAqlnKLpl2OlKnAo5qKM3qtK-oMg1XvcMYfJeciuomYSFDFywDNsyT1O6WfXFQ-Zi3j6zy

VC++中连接Oracle数据库的几种方法:
http://wenku.baidu.com/link?url=28YGj8UHqEmnhOa9BaRCSOI6w_f-QUomD0tjb3rFdEzxZ_8G0LkoCULOnYS0icX6u1KrUIhXPynyDIJPnVQDzlJn_-tlpIdJ1qA1m2IqtsW

OCI接口简介及其在VC++中的应用:
http://blog.csdn.net/cherishlei/article/details/4398867

C++使用OCI连接Oracle :
http://blog.chinaunix.net/uid-21592001-id-3271863.html

Pro*C  OCI  OCCI  及OCI介绍:
http://blog.sina.com.cn/s/blog_4b3c1f950100pvzx.html

OCI编程历程

http://www.cnblogs.com/ychellboy/archive/2010/04/16/1713884.html


使用点:
1、下载instantclient和ocilib(太大,我没有上传,不过需要的东西(除了sqlplus)我都上传并放到测试程序的ocilib目录中和debug目录中了)
    我的instantclient有instantclient-basic-nt-11.2.0.4.0、instantclient-odbc-nt-11.2.0.4.0、instantclient-sdk-nt-11.2.0.4.0、instantclient-sqlplus-nt-11.2.0.4.0
    我的ocilib是ocilib-4.1.0-windows(这里面有demo示例)
    
2、解压下载的压缩包(合并那几个instantclient为instantclient_11_2,程序运行需要知道这个目录)

3、ping服务器地址,telnet查看服务器端口能否访问
    本地cmd访问服务器oracle
    cmd定位到sqlplus.exe所在的目录中(比如,instantclient-sqlplus-nt-11.2.0.4.0目录中就会含有sqlplus.exe)
    > sqlplus /nolog
    > conn 用户名/密码@服务器地址:端口/数据库SID
    eg:conn test/[email protected]:1521/ORCL

4、运行ocilib-4.1.0-windows的示例(在ocilib-4.1.0-windows\ocilib\proj\test中)可以测试是否能连上服务器的数据库
    运行ocilib的demo时需要把lib32下的dll和lib放到debug中


二、测试程序说明

我的系统是32位,用的Unicode编码

这些文件在下载客户端驱动之后都有(我已经放到我的ocilib目录中和debug目录中了)

访问oracle数据库需要3个dll文件:oci.dll、ociliba.dll、oraociei11.dll放到和运行程序同一个目录下(比如Debug下)
还要添加环境变量:NLS_LANG 值为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK(不然的话向数据库插入中文会是乱码)

我建了ocilib目录
    ocilib目录中有两个子目录,分别是include和lib32
    include中有ocilib.h        ocilib.hpp        ocilib_core.hpp        ocilib_impl.hpp
    lib32中有libocilib.a、libocilibw.a、ociliba.dll、ociliba.lib、ocilibw.dll、

VS2013属性配置:
字符集:Unicode字符集
(工程|属性|调试)环境:path=..\ocilib\lib32
(工程|属性|C/C++|常规)附加包含目录:..\ocilib\include
(工程|属性|连接器)附加库目录:..\ocilib\lib32

程序中还有
#pragma comment(lib, "..\\ocilib\\lib32\\ociliba.lib")

包含头文件
#include "ocilib.hpp"

初始化操作
Environment::Initialize(Environment::Default,"oci.dll和oraociei11.dll的目录");//第二个参数就是上述lib目录


三、程序展示

#include 
#include 
#include 

#include "ocilib.hpp"



#pragma comment(lib, "..\\ocilib\\lib32\\ociliba.lib")

int main()
{
	using namespace ocilib;
	using namespace std;

	//当前程序路径
	string szlibpath = "E:\\shuaizy\\Trunk\\oracletest\\Debug";

	try
	{
		Environment::Initialize(Environment::Default, szlibpath);
		Connection con("192.168.2.201/orcl", "test", "qiantangjiang");//实例、用户名、密码
		Statement st(con);
		st.Execute("select * from all_users order by user_id");
		Resultset rs = st.GetResultset();
		while (rs++)
		{
			std::cout << std::setw(30) << std::left << rs.Get("username")
			<< std::setw(10) << std::right << rs.Get("user_id")
			<< std::setw(20) << std::right << rs.Get("created") << std::endl;
		}
		//std::cout << "=> Total fetched rows : " << rs.GetCount() << std::endl;
		cout << "执行语句:\r\nselect * from all_users order by user_id\r\n查询到 " 
			<< rs.GetCount() << " 条数据" << endl;
	}
	catch (std::exception &ex)
	{
		std::cout << ex.what() << std::endl;
	}
	Environment::Cleanup();
	return 0;
}




你可能感兴趣的:(oracle)