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
- Linux c/c++访问Oracle数据库--连接数据库
- C#连接Oracle数据库
- linux c 连接Oracle 10g 数据库
- oracle 12c 访问数据库
- C#(.Net) 连接 ORACLE数据库
- C#Winform连接Oracle数据库
- Linux C 访问数据库操作
- linux c编程访问数据库
- Linux c/c++访问Oracle数据库--环境配置
- Linux c/c++访问Oracle数据库--操作数据
- Linux c/c++访问Oracle数据库--游标操作
- Linux C 连接Timesten数据库
- Linux C连接Mysql数据库
- Linux C连接Mysql数据库
- Linux C连接Mysql数据库
- linux c 连接mysql数据库
- Linux C连接Mysql数据库
- Linux下C连接Oracle数据库OCCI的若干问题
- 关于listview加载多种item的解决方案
- RabbitMQ入门之安装配置与简单实例----perfect
- Oracle数据库实例的创建、删除、修改
- UML类图于类之间的关系详解
- C语言堆栈入门——堆和栈的区别
- Linux c/c++访问Oracle数据库--连接数据库
- Android中的Scroller类讲解
- HTML table的td内容过长时,自动隐藏效果
- Flex手机项目继承IconItemRenderer自定义List组件
- jdk配置
- 1
- Java--设计模式之工厂模式
- linux 3.6 启动源码分析(三) setup_arch
- 润乾报表V5饼图显示百分比数据