DB2编译嵌入式编程

1.代码test1.sqc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
EXEC SQL INCLUDE SQLCA;
int main()
{
 EXEC SQL BEGIN DECLARE SECTION;
 char firstname[130];
 char userid[9];
 char passwd[19];
 EXEC SQL END DECLARE SECTION;

 EXEC SQL CONNECT TO sample;
 EXEC SQL SELECT FIRSTNME INTO :firstname
 FROM EMPLOYEE fetch first 1 row only;

 printf( "First name = %s\n", firstname );
 EXEC SQL CONNECT RESET;
 return 0;
}

其中样例数据库sample可用DB2自带的实用程序db2sampl来创建。

2.连接数据库:

     db2 connect to sample user DBUSER using DBPWD
3.预编译:

     db2 prep test1.sqc bindfile,会生成test1.c和test1.bnd文件
4.绑定bnd文件

    db2 bind test1.bnd (GRANT PUBLIC),同时指定访问权限(GRANT PUBLIC)-----可选

5.复位数据库连接:

db2 connect reset
DB20000I  SQL 命令成功完成。
db2 terminate
DB20000I  TERMINATE 命令成功完成。

后面的步骤就不必和数据库建立连接,故复位。

6.编译连接、运行

gcc -c test1.c  -g -I/home/db2inst1/sqllib/include
gcc -o test1  -g -I/home/db2inst1/sqllib/include test1.o -L/home/db2inst1/sqllib/lib -Wl,-rpath,/home/db2inst1/sqllib/lib -ldb2
$ ./test1 
First name = CHRISTINE

7.以上步骤较多,写成Makefile

DB2PATH = /home/$(DB2INSTANCE)/sqllib

# Use the gnu c compiler
CC= gcc

# The required compiler flags
CFLAGS= $(EXTRA_CFLAGS) -g -I$(DB2PATH)/include

# The required libraries 
LIBS= -L$(DB2PATH)/lib -Wl,-rpath,$(DB2PATH)/lib -ldb2

# To connect to a remote SAMPLE database cataloged on the client machine
# with another name, update the DB variable.
DB=sample
# Set UID and PWD if neccesary  
UID=
PWD=

COPY=cp
ERASE=rm -f


#############################################################################
#  3 -- COMMANDS TO MAKE INDIVIDUAL SAMPLES
#                  3a -  utilities
#                  3b -  non embedded SQL, non client/server samples
#                  3c -  embedded SQL, non client/server samples
#                  3d -  client/server samples (mixed)
#############################################################################
EXE = test1
SQC = test1.sqc
C   = test1.c
BND = test1.bnd
OBJ = test1.o

all : $(EXE)
$(EXE) : $(OBJ)
	$(CC) -o $@ $(CFLAGS) $(OBJ) $(LIBS)
$(C) $(BND) : $(SQC)
	db2 connect to $(DB)
	db2 prep $(SQC) bindfile
	db2 bind $(BND) GRANT PUBLIC
	db2 connect reset
	db2 terminate
$(OBJ) : $(C)
	$(CC) -c $(C) $(CFLAGS)
clean :	\
	cleangen \
	cleanemb
cleangen :
	$(ERASE) *.o *.map *~

cleanemb :
	$(ERASE) $(C)

cleanall : \
	clean
	$(ERASE) *.bnd
	$(ERASE) $(EXE) 


 

扫描二维码关注公众号,回复: 572700 查看本文章

猜你喜欢

转载自my.oschina.net/u/2245781/blog/1811173