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 查看本文章