Linux c/c++访问Oracle数据库--连接数据库

来源:互联网 发布:网络教育能报四级英语 编辑:程序博客网 时间:2024/06/03 09:42

上一篇中记录了开发环境的配置,这一次将会记录通过C程序访问数据库的基本例子~~

/***********************/


#include <stdio.h>
#include <sqlca.h>#include <oraca.h>EXEC ORACLE OPTION(ORACA=YES);int main(){        char uid[]="test/test@192.168.30.50:1521/rsdb";        EXEC SQL CONNECT :uid;        if (sqlca.sqlcode == 0)                printf("Connect successful!\n");        else                printf("%s\n",sqlca.sqlerrm.sqlerrmc);        return sqlca.sqlcode;}

这是一个连接数据库的基本例子。在这里使用pro*c需要包含两个头文件

#include <sqlca.h>#include <oraca.h>
在 sqlca.h 中定义了一个结构体,也是至关重要的一个结构体!!!

 struct   sqlca           {           /* ub1 */ char    sqlcaid[8];           /* b4  */ int     sqlabc;           /* b4  */ int     sqlcode;           struct             {             /* ub2 */ unsigned short sqlerrml;             /* ub1 */ char           sqlerrmc[70];             } sqlerrm;           /* ub1 */ char    sqlerrp[8];           /* b4  */ int     sqlerrd[6];          /* ub1 */ char    sqlwarn[8];          /* ub1 */ char    sqlext[8];                                                                                                                };
通过Pro*c开发实际上是在C中加入了SQL语句而已,在我们程序执行任何一句SQL语句之后,都会将执行结构保存到该结构体,以便我们判断SQL执行结果。

一般情况下我们只用到其中的两个变量(我只用到两个~~)sqlcode和sqlerrmc ,sqlcode保存了执行结果代码,sqlerrmc保存了错误信息。

在oraca.h中定义一个结构体(估计是在转换成C语言用到的,没有深入研究~~)

EXEC ORACLE OPTION(ORACA=YES);
这是Oracle 的选项说明,允许我们在程序中使用 ORACA。

int main(){        char uid[]="test/test@192.168.30.50:1521/rsdb";        EXEC SQL CONNECT :uid;        if (sqlca.sqlcode == 0)                printf("Connect successful!\n");        else                printf("%s\n",sqlca.sqlerrm.sqlerrmc);        return sqlca.sqlcode;}
这里是我们的main函数,

EXEC SQL CONNECT :uid;
这一句就是我们连接数据库的语句,在Pro*c中插入SQL语句的基本格式为:

EXEC SQL Command option;

EXEC SQL 这两个应该是告诉proc编译器这是一句Sql语句,需要做转换。Command 这是需要的sql命令,optiion这是命令参数。最后以 分号 结尾。

其实只是在sql语句前面加上 EXEC SQL ,在语句最后加上 分号。

再看我们的这一条语句,根据命令可以看出是connect (连接)数据库,当然,连接数据库我们必须要有访问权限的数据库用户名和密码,数据库主机以及端口和SID。

接着看 :uid ,可以看出我已经定义了uid,这里的uid就是connect 命令的参数了,connect的参数自然就是些用户名之类的东西的。

char uid[]="test/test@192.168.30.50:1521/rsdb";
一般情况下我们都是写成 用户名/密码@服务器地址:端口/SID,至此,connect命令和它的参数都已经有了,但是为什么在uid前面会有一个 :(冒号) 呢?

在Pro*c 中得嵌入SQL语句中如果要引用宿主变量,那么就需要在宿主变量前加 :(冒号)~~~

宿主变量:我们是在C中嵌入的SQL语句,那么C就就是我们的宿主,用C语言定义的变量就是宿主变量了。。。

        if (sqlca.sqlcode == 0)                printf("Connect successful!\n");        else                printf("%s\n",sqlca.sqlerrm.sqlerrmc);
由于我们执行了connect 的SQL语句,所以我们的sqlca 结构体被置成我们的执行的结构,可以通过判断sqlca.sqlcode的值来查看我们的语句是否执行成功。

在这里 sqlcode == 0则表示我们的语句被成功执行,其他值则表示执行失败或者其他错误。

总算是连接完成了~~~真是啰嗦啊!!!



1 0
原创粉丝点击