C++使用 OCILIB 连接 Oracle(解决OCCI中getstring()出错的问题)
(2013-01-15 16:39:42)
标签:
ocioraclec |
分类: ITprogrammer |
用Oracle自带的OCCI连接数据库,使用getstring()时候出现错误,网上各种解决方法,但是没有一个可行的,直到我看到一个和我碰到类似问题的外国朋友的留言:I
ditched OCCI interface and adopted
OCILIB。才恍然大悟,如果有类似困扰的朋友,赶紧抛弃OCCI,奔向OCILIB吧
去http://www.oschina.net/news/35997/ocilib-3-11-1(开源中国)下载OCILIB的最新版本,当然也可以直接去OCILIB的网站下。
简单配置之后就可以使用了,里面附带了各种DEMO,下面给个转载来的较为简单的例子:
#include
#include "ocilib.h"
//错误处理
void err_handler(OCI_Error *err)
{
int err_type =
OCI_ErrorGetType(err);
char
*err_msg = (char*)OCI_ErrorGetString(err);
printf("%s -
%s\n", err_type == OCI_ERR_WARNING ? "warning" : "error",
err_msg);
}
int main(int argc, char *argv[])
{
int nRet =
0;
OCI_Connection* cn = NULL;
OCI_Statement* st = NULL;
OCI_Resultset* rs = NULL;
//初始化OCI库
nRet =
OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);
if(!nRet)
{
std::cout
<< "OCI_Initialize fail"
<< std::endl;
return
-1;
}
do
{
std::cout
<< "compile version:"
<< OCI_GetOCICompileVersion()
<< std::endl;
std::cout
<< "runtime version:"
<< OCI_GetOCIRuntimeVersion()
<< std::endl;
//建立联接:tns:cctt1;username:d10086;password:d10086
cn =
OCI_ConnectionCreate("cctt1", "D10086", "D10086",
OCI_SESSION_DEFAULT);
if(NULL ==
cn)
{
std::cout
<< "OCI_ConnectionCreate fail"
<< std::endl;
err_handler(OCI_GetLastError());
nRet =
-2;
break;
}
printf("Server
major version
: %i\n",
OCI_GetServerMajorVersion(cn));
printf("Server
minor version
: %i\n",
OCI_GetServerMinorVersion(cn));
printf("Server revision version : %i\n\n",
OCI_GetServerRevisionVersion(cn));
printf("Connection
version : %i\n\n", OCI_GetVersionConnection(cn));
//建立声明
st =
OCI_StatementCreate(cn);
if(NULL ==
st)
{
std::cout
<< "OCI_StatementCreate fail"
<< std::endl;
err_handler(OCI_GetLastError());
nRet =
-3;
break;
}
去http://www.oschina.net/news/35997/ocilib-3-11-1(开源中国)下载OCILIB的最新版本,当然也可以直接去OCILIB的网站下。
简单配置之后就可以使用了,里面附带了各种DEMO,下面给个转载来的较为简单的例子:
#include
#include "ocilib.h"
//错误处理
void err_handler(OCI_Error *err)
{
}
int main(int argc, char *argv[])
{