您的位置:首页 > 数据库 > Oracle

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

2013-12-16 15:38 639 查看
上一篇中记录了开发环境的配置,这一次将会记录通过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则表示我们的语句被成功执行,其他值则表示执行失败或者其他错误。

总算是连接完成了~~~真是啰嗦啊!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: