Proc*C实例一 -- 连接数据库

来源:互联网 发布:python怎么使用wget 编辑:程序博客网 时间:2024/06/04 23:36

         原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/tobyaries/article/details/9112135

 

       最近由于项目的需要,了解了下Proc*C。笔者也只是刚了解了如何连接ORACLE数据库,原理以后再慢慢研究。给出代码和Makefile文件,大家使用时只需要根据实际情况修改下路径ORALCE_HOME以及用户名密码还有监听的实例名就可以了。

1. conn.pc 文件

#include <stdio.h>#include <string.h>#include <stdlib.h>#include "sqlca.h"EXEC SQL BEGIN DECLARE SECTION;    char *uid = "xiaogenban/xiaogenban@xiaogenban";EXEC SQL END DECLARE SECTION;int main(){    EXEC SQL CONNECT :uid;    printf("%s",sqlca.sqlerrm.sqlerrmc);    if(sqlca.sqlcode == 0)        printf("Success!!!\n");    else        printf("Fail!!!, the sqlcode is %d\n", sqlca.sqlcode);}

xiaogenban/xiaogenban 为用户名密码

@后面的xiaogenban为数据库实例名,一般在ORACLE_HOME/network/admin/tnsnames.ora中要配置。

 

2. Makefile文件

kefile for the Pro*C Precompiler:#       precompiling, compliling, and linking using the gcc compiler.#############################ORA_INC=-I$(ORACLE_HOME)/precomp/publicORA_LIBDIR=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/precomp/lib \        -L$(ORACLE_HOME)/sqlplus/lib -L$(ORACLE_HOME)/otrace/libORA_LIBS= -lclntsh#PROC=procPROCFLAGS=dbms=v6_char#CC=gccCFLAGS= $(ORA_INC) -I.#PROGS= conn#OBJS= conn.o#############################all: $(PROGS)%.c:%.pc$(PROC) $(PROCFLAGS) iname=$^%.o:%.c$(CC) $(CFLAGS) -c $<conn: ${OBJS}$(CC) $(CFLAGS) -o $@ $< $(ORA_LIBDIR) $(ORA_LIBS) -lmclean:rm *.o *.c *.lis $(PROGS)

#附: $^ : 所有依赖文件; $< : 依赖的第一个文件; $@ : 目标文件


这个Makefile文件是我根据内置规则重新写过的,第一版的Makefile更好懂点,如下:

 

kefile for the Pro*C Precompiler:#       precompiling, compliling, and linking using the gcc compiler.#ORA_INC=-I$(ORACLE_HOME)/precomp/publicORA_LIBDIR=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/precomp/lib \        -L$(ORACLE_HOME)/sqlplus/lib -L$(ORACLE_HOME)/otrace/libORA_LIBS= -lclntsh##PROC=procPROCFLAGS=dbms=v6_char#CC=gccCFLAGS= $(ORA_INC) -I.##PROGS= connall: $(PROGS)conn: conn.pc $(PROC) $(PROCFLAGS) iname=conn.pc$(CC) $(CFLAGS) -c $conn.c$(CC) $(CFLAGS) -o conn conn.o $(ORA_LIBDIR) $(ORA_LIBS) -lmclean:rm *.o conn.c *.lis $(PROGS)


直接make all 应该是可以连接上数据库的 :)

[cardc@cardC b]$ make all
proc dbms=v6_char iname=conn.pc

Pro*C/C++: Release 10.2.0.1.0 - Production on Mon Jun 17 14:54:59 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /home/oracle/oracle/product/10.2.0/client_1/precomp/admin/pcscfg.cfg

PCC-W-02110, DBMS=V6_CHAR is deprecated. Use CHAR_MAP=VARCHAR2, DBMS=V7 instead
gcc -I/home/oracle/oracle/product/10.2.0/client_1/precomp/public -I. -c conn.c
gcc -I/home/oracle/oracle/product/10.2.0/client_1/precomp/public -I. -o conn conn.o -L/home/oracle/oracle/product/10.2.0/client_1/lib -L/home/oracle/oracle/product/10.2.0/client_1/rdbms/lib -L/home/oracle/oracle/product/10.2.0/client_1/precomp/lib -L/home/oracle/oracle/product/10.2.0/client_1/sqlplus/lib -L/home/oracle/oracle/product/10.2.0/client_1/otrace/lib -lclntsh -lm
rm conn.c
[cardc@cardC b]$ ./conn
Success!!!

 


原创粉丝点击