Linux c/c++访问Oracle数据库--连接数据库
2013-12-16 15:38
639 查看
上一篇中记录了开发环境的配置,这一次将会记录通过C程序访问数据库的基本例子~~
/***********************/
这是一个连接数据库的基本例子。在这里使用pro*c需要包含两个头文件
一般情况下我们只用到其中的两个变量(我只用到两个~~)sqlcode和sqlerrmc ,sqlcode保存了执行结果代码,sqlerrmc保存了错误信息。
在oraca.h中定义一个结构体(估计是在转换成C语言用到的,没有深入研究~~)
EXEC SQL Command option;
EXEC SQL 这两个应该是告诉proc编译器这是一句Sql语句,需要做转换。Command 这是需要的sql命令,optiion这是命令参数。最后以
分号 结尾。
其实只是在sql语句前面加上 EXEC SQL ,在语句最后加上 分号。
再看我们的这一条语句,根据命令可以看出是connect (连接)数据库,当然,连接数据库我们必须要有访问权限的数据库用户名和密码,数据库主机以及端口和SID。
接着看 :uid ,可以看出我已经定义了uid,这里的uid就是connect 命令的参数了,connect的参数自然就是些用户名之类的东西的。
在Pro*c 中得嵌入SQL语句中如果要引用宿主变量,那么就需要在宿主变量前加 :(冒号)~~~
宿主变量:我们是在C中嵌入的SQL语句,那么C就就是我们的宿主,用C语言定义的变量就是宿主变量了。。。
在这里 sqlcode == 0则表示我们的语句被成功执行,其他值则表示执行失败或者其他错误。
总算是连接完成了~~~真是啰嗦啊!!!
/***********************/
#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则表示我们的语句被成功执行,其他值则表示执行失败或者其他错误。
总算是连接完成了~~~真是啰嗦啊!!!
相关文章推荐
- C++通过ADO访问数据库的连接字符串
- Linux系统下连接Oracle数据库,创建新的数据库用户及分配权限
- Linux下使用C/C++访问数据库——MySQL篇
- Linux下使用C/C++访问数据库——Oracle之OCI篇
- Linux下使用C/C++访问数据库——Oracle之OCI篇
- linux下命令行可以连接远程数据库而php的mssql_connect()却不可以的解决方案及linux对外远程访问拒绝
- Linux下使用C/C++访问数据库——MySQL篇
- Linux下使用C/C++访问数据库——SQL Server篇
- Linux下使用C/C++访问数据库——SQL Server篇 推荐
- Linux c/c++访问Oracle数据库--游标操作
- Linux下使用C/C++访问数据库
- Linux下使用C/C++访问数据库
- Linux系统下连接Oracle数据库,创建新的数据库用户及分配权限
- .net访问Oracle数据库——数据库连接
- linux c++编写访问mysql程序,访问数据库出错,解决方法
- Linux下使用C/C++访问数据库――MySQL篇
- Linux下使用C/C++访问数据库——Oracle之OCI篇 推荐
- Linux下使用C/C++访问数据库-SQL Server
- Linux下使用C/C++访问数据库——MySQL篇