当前位置: 技术问答>linux和unix
linux下oracle操作odbc、 por*c/c 、oci/occi
来源: 互联网 发布时间:2015-12-28
本文导语: 环境: redhat kernel 2.6.9-5.EL oracle 从otn上下载安装的10201_database_linux32.zip,10201_client_linux32.zip. 描述: 在linux下用c/c++语言,连接到oralce数据库对数据库进行操作(select,update,insert,delete以及存储过程的执行)。 1:用oci...
环境:
redhat kernel 2.6.9-5.EL
oracle 从otn上下载安装的10201_database_linux32.zip,10201_client_linux32.zip.
描述:
在linux下用c/c++语言,连接到oralce数据库对数据库进行操作(select,update,insert,delete以及存储过程的执行)。
1:用oci的方式连接,因为oracle call interface文档太多,而且oracle10g的数据库上没有oci的demo,好像只找到oc4j。
2:后来用unix-odbc, 主要就是这个地方的例子。http://www-128.ibm.com/developerworks/cn/linux/database/odbc/index.html
在例子里面没有定义hstmt的变量,加了SQLHSTMT hstmt;并改头文件#include
#include
#include
程序编译通过,连接时加入usr/local/lib下面的一个liboraodbc.So这个库,
gcc -g -o odbcDemo -L/usr/local/lib -l oraodbc odbcDemo.c 通过。
执行之后,出现segmentation fault错误。网上搜过这个错误,最后gdb调试定位到
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);这两句话里面的第四个参数有错误。把这个参数的类型对应成了数据库里面对应字段的类型,以及更改第五个参数(长度),程序还是报这个错误。
问题:
对上面那个unixodbc方法,存在的问题,有没有人做过类似的工作,在线等待请帮忙解答。
关于linux下用c/c++对数据库进行操作,有没有其它的一些解决办法?
如果有类似的源代码或者开源的一些代码,将非常感激......
redhat kernel 2.6.9-5.EL
oracle 从otn上下载安装的10201_database_linux32.zip,10201_client_linux32.zip.
描述:
在linux下用c/c++语言,连接到oralce数据库对数据库进行操作(select,update,insert,delete以及存储过程的执行)。
1:用oci的方式连接,因为oracle call interface文档太多,而且oracle10g的数据库上没有oci的demo,好像只找到oc4j。
2:后来用unix-odbc, 主要就是这个地方的例子。http://www-128.ibm.com/developerworks/cn/linux/database/odbc/index.html
在例子里面没有定义hstmt的变量,加了SQLHSTMT hstmt;并改头文件#include
#include
#include
程序编译通过,连接时加入usr/local/lib下面的一个liboraodbc.So这个库,
gcc -g -o odbcDemo -L/usr/local/lib -l oraodbc odbcDemo.c 通过。
执行之后,出现segmentation fault错误。网上搜过这个错误,最后gdb调试定位到
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);这两句话里面的第四个参数有错误。把这个参数的类型对应成了数据库里面对应字段的类型,以及更改第五个参数(长度),程序还是报这个错误。
问题:
对上面那个unixodbc方法,存在的问题,有没有人做过类似的工作,在线等待请帮忙解答。
关于linux下用c/c++对数据库进行操作,有没有其它的一些解决办法?
如果有类似的源代码或者开源的一些代码,将非常感激......
|
我用的是OCI。
CDBRecordSet rs1;
CDBConnection *pConn = new CDBConnection;
iResult=pConn->Open("username","password","database","ip");
if (iResult!=0)
{
fprintf(stderr,"nOpen Error!n");
exit(0);
}
......
char sSqlStmt[1024];
memset(sSqlStmt,0,sizeof(sSqlStmt));
sprintf(sSqlStmt,"select * from TB_CALLTRANSFER ");
if (rs1.Open(sSqlStmt,pConn) ==0 )
{
for(unsigned int k=0; k
CDBRecordSet rs1;
CDBConnection *pConn = new CDBConnection;
iResult=pConn->Open("username","password","database","ip");
if (iResult!=0)
{
fprintf(stderr,"nOpen Error!n");
exit(0);
}
......
char sSqlStmt[1024];
memset(sSqlStmt,0,sizeof(sSqlStmt));
sprintf(sSqlStmt,"select * from TB_CALLTRANSFER ");
if (rs1.Open(sSqlStmt,pConn) ==0 )
{
for(unsigned int k=0; k