C语言连接Oracle (转载)
最近在搞C语言连接Oracle、DB2数据库,现把C连接Oracle的文章总结下:
用C语言连接ORACLE数据库。
有两个思路和目的
思路一)
本地环境:UBUNTU 7.04,ORACLE 10G
目的:用C语连接本地数据库sid:umail,ip:127.0.0.1,用户名:umail,密码:umail,表tt1.
显示表tt1的所有记录.
思路二)
远程环境服务器1:linux es3
远程数据库:oracle9i
目的:在远程一台服务器上,再远程连接数据库,用户名和表同上
显示表tt1的所有记录.
一)思路一解决办法:
1) 查看/etc/profile文件
export ORACLE_BASE=/share/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.1
export ORACLE_SID=umail
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$LD_LIBRARY_PATH
export JAVA_HOME=/share/jdk
export AWT_TOOLKIT=MToolkit
作用:解决tnsnames.ora问题
2)更改$ORACLE_HOME/precomp/admin/pcscfg.cfg
sys_include=(/usr/include,/usr/lib/gcc/i486-linux-gnu/4.1.2/include,/usr/lib/gcc/i486-linux-gnu/3.4.6/include,/share/oracle/product/10.2.1/precomp/public,/usr/include/sys)
include=(/share/oracle/product/10.2.1/precomp/public)
include=/share/oracle/product/10.2.1/precomp/hdrs
include=/share/oracle/product/10.2.1/tpcc2x_2/src
include=/share/oracle/product/10.2.1/precomp/precomp/include
include=/share/oracle/product/10.2.1/precomp/oracore/include
include=/share/oracle/product/10.2.1/precomp/oracore/public
include=/share/oracle/product/10.2.1/precomp/rdbms/include
include=/share/oracle/product/10.2.1/precomp/rdbms/public
include=/share/oracle/product/10.2.1/precomp/rdbms/demo
include=/share/oracle/product/10.2.1/precomp/nlsrtl/include
include=/share/oracle/product/10.2.1/precomp/nlsrtl/public
include=/share/oracle/product/10.2.1/precomp/network_src/include
include=/share/oracle/product/10.2.1/precomp/network_src/public
include=/share/oracle/product/10.2.1/precomp/network/include
include=/share/oracle/product/10.2.1/precomp/network/public
include=/share/oracle/product/10.2.1/precomp/plsql/public
ltype=short
3)新test.pc文件,如下:
#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
int main()
{
//声明SQL变量
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[20],pass[20],tnsname[20];
//VARCHAR预编译后为struct { unsigned short len; unsigned char arr[20];}
char ename[20];
int empno;
EXEC SQL END DECLARE SECTION;
//声明C变量
int i=0;
//变量赋值
strcpy(user.arr,"umail");
user.len=(unsigned short)strlen((char *)user.arr);
strcpy(pass.arr,"umail");
pass.len=(unsigned short)strlen((char *)pass.arr);
strcpy(tnsname.arr,"umail");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
//连接数据库
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;
EXEC SQL declare emp_cursor cursor for
select id,ename from umail.tt1;
EXEC SQL open emp_cursor;
EXEC SQL WHENEVER NOT FOUND DO break;
while(1)
{
EXEC SQL fetch emp_cursor into :empno,:ename;
printf("the empno %d/'s name is %s/n",empno,ename);
i=i+1;
}
printf("Yeah!We get %d records/n",i);
EXEC SQL close emp_cursor;
EXEC SQL commit work release;
}
3)更改tnsname文件如下:
UMAIL =
(DEscrīptION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = umail)
)
)
EXTPROC_CONNECTION_DATA =
(DEscrīptION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
4)编译方法:
预编译 proc test.pc
注:这步是依赖于$ORACLE_HOME/precomp/admin/pcscfg.cfg
编译:
gcc -o test test.c $ORACLE_HOME/lib/libclntsh.so
思路二解决办法:
1)在远程服务器上新建一个放tnsname.ora的目录
mkdir -p /root/network/admin
2)修改tnsname.ora文件,加入远程数据库信息,如下:
db =
(DEscrīptION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.217)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = umail)
)
)
3)将以上的tnsname.ora放入到/root/network/admin下面
scp tnsname.ora 192.168.6.197:/root/network/admin
4)在远程服务器上,将/etc/profile修改如下:
增加以下内容:
export ORACLE_HOME=/root
用su -加载环境变量
5)在本地,更改上一个实验的test.pc文件
原内容:
strcpy(tnsname.arr,"umail");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
更改后的内容:
strcpy(tnsname.arr,"db");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
6)利用本地环境重新编译test.pc
预编译 proc test.pc
scp test.c 192.168.6.197:/tmp
编译:
gcc -o test test.c /usr/lib/libclntsh.so.10.1
7)将test上传到远程服务器
scp test 192.168.6.197:/tmp
8)将libclntsh.so.10.1,libnnz10.so上传到远程服务器的/usr/lib下面
scp libclntsh.so.10.1 192.168.6.197:/usr/lib
scp libnnz10.so 192.168.6.197:/usr/lib
9)执行测试test
cd /tmp;./test
C语言连接Oracle (转载)的更多相关文章
- C语言连接Oracle
原文:C语言连接Oracle 最近在搞C语言连接Oracle.DB2数据库,现把C连接Oracle的文章总结下: 用C语言连接ORACLE数据库.有两个思路和目的 思路一)本地环境:UBUNTU 7. ...
- MyEclipse用Java语言连接Oracle数据库
在MyEclipse下Java连接Oracle数据库 第一步:新建Java项目. 填写项目名,其它设置默认,点击完成即可. 新建java类,填写包名和类名,勾选public static void m ...
- Go语言连接Oracle(就我这个最全)
综合参考了网上挺多的方案 倒腾了半天终于连接好了 Go都出来这么多年了 还没有个Oracle的官方驱动... 过程真的很蛋疼..一度想放弃直接连ODBC 首先交代一下运行环境和工具版本: WIN10 ...
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- php连接oracle数据库转载
php连接oracle数据库及查询数据的方法 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-12-29 这篇文章主要介绍了php连接oracle数据库及查询数据的方法 ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- Delphi连接Oracle控件ODAC的安装及使用(轉載)
Delphi连接Oracle控件ODAC的安装及使用 2010-08-13 01:13:37 标签:Oracle Delphi 控件 休闲 ODAC 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- atitit.client连接oracle数据库的方式总结
client连接oracle数据库的方式总结 文件夹 Java程序连接一般使用jar驱动连接.. ... 桌面GUI一般採取c语言驱动oci.dll 直接连接... 间接连接(须要配置tns及其env ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
随机推荐
- base64和图片的互转(HTML5的File实现)
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- Android实现地图服务
Android实现地图服务 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 这里使用的是百度地图,具体配置方法请看官方文档即可.(也可以参考我 ...
- 树莓派最简易Wifi配置
树莓派最简易Wifi配置 相信我,连博客都会偷懒写个最简易给你看 前提,只有一根网线没有网络的前提下进行的. 基于Win10系统和树莓派2015-05-05-raspbian-wheezy.img测试 ...
- linux 简单的DMA例程
一个简单的使用DMA 例子 示例:下面是一个简单的使用DMA进行传输的驱动程序,它是一个假想的设备,只列出DMA相关的部分来说明驱动程序中如何使用DMA的. 函数dad_transfer是设置DMA对 ...
- VS2010出现灾难性错误的解决办法
VS2010出现灾难性错误的解决办法 之前本人利用VS2010 在编写一个基于对话框的程序的时候,要在对话框类C-.DLG中添加函数,右键点击类向导,此时界面上弹出一个消息框,告知出现灾难性事故, ...
- P1571: [Usaco2009 Open]滑雪课Ski
DP. ; var t,s,n,i,j,m,l,a,c,d:longint; f,e:array[..,..maxn] of longint; q:array[..] of longint; g:ar ...
- Swing做的非阻塞式仿飞秋聊天程序
采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...
- 静态数据认证(SDA)与动态数据认证(DDA)的区别
PBOC/EMV里有两个非常重要的概念,SDA(staticdataauthentication)和DDA(dynamicdataauthentication),分别叫做静态数据认证和动态数据认证.这 ...
- STL之multiset
参见http://www.cplusplus.com/reference/set/multiset/ template < class T, ...
- Windows Phone 8内存控制研究 之 LonglistSelector使用陷阱
最近工作中常常被问到如何降低WP内存使用,便再一次开始研究内存问题,首先发现了LonglistSelector使用的一个常见问题: 概述 若将Longlistselector 控件的ItemsSour ...