panpan
作者panpan·2012-06-15 15:40
数据库架构师·pan

嵌入式sql案例

字数 2681阅读 2329评论 0赞 1
一、编辑包含sql代码的源码文件static.sqc
#include <stdio.h>
#include <string.h>
#include <sql.h>

int main()
{
printf("nnthis is a test programming !nn");

EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char employeeNO[7];
char lastName[16];
double salary;
short  salaryNI;
EXEC SQL END   DECLARE SECTION;

EXEC SQL CONNECT TO sample user db2inst1 using panpan;

EXEC SQL DECLARE cursor1 CURSOR for
select empno,
lastname,
double(salary)
from db2inst1.employee
where job = 'DESIGNER';

EXEC SQL OPEN cursor1;

while(sqlca.sqlcode == SQL_RC_OK)
{
EXEC SQL FETCH cursor1
into :employeeNO,
    :lastName,
    :salary :salaryNI;
if (sqlca.sqlcode == SQL_RC_OK)
{
printf("%-8s %-16s  ",employeeNO,lastName);
if (salaryNI >= 0)
{
printf("%lfnn",salary);
}
else
{
printf("unknownn");
}
}
}

EXEC SQL close cursor1;
EXEC SQL commit;
exec sql connect reset;

return 0;
}

二、利用db2工具预编译,将sql替换成api函数,生成static.c
db2 connect to sample user db2inst1 using panpan   --因为需要绑定执行计划,需要连接数据库
db2 prep static.sqc [bindfile]    --加上bindfile选项,则生成绑定文件,不在数据库中生成执行计划,prep/precompile
db2 bind static.bnd    --绑定访问计划到数据库

三、编译、汇编成目标文件
gcc -c static.c -I /home/db2inst1/sqllib/include -o static.o

四、将生成的目标文件与其他库链接
gcc static.o -o static -l db2 -L /home/db2inst1/sqllib/lib

五、运行可执行文件static
./static
结果报错:
 error while loading shared libraries: libdb2.so.1: cannot open shared object file: No such file or directory

六、查看static运行需要的库文件
ldd static
输出:
 linux-gate.so.1 =>  (0x00e32000)
        libdb2.so.1 => not found
        libc.so.6 => /lib/libc.so.6 (0x00adb000)
        /lib/ld-linux.so.2 (0x00ab8000)

七、查找 libdb2.so.1库文件
locate libdb2.so.1
输出:
/opt/ibm/db2/V9.7/lib32/libdb2.so.1
find工具同样可以实现该功能,但是速度慢。

八、建立软链接
ln -s /opt/ibm/db2/V9.7/lib32/libdb2.so.1 /lib/libdb2.so.1

九、再次执行static
./static
输出:
this is a test programming !

000150   ADAMSON           55280.000000

000160   PIANKA            62250.000000

000170   YOSHIMURA         44680.000000

000180   SCOUTTEN          51340.000000

000190   WALKER            50450.000000

000200   BROWN             57740.000000

000210   JONES             68270.000000

000220   LUTZ              49840.000000

200170   YAMAMOTO          64680.000000

200220   JOHN              69840.000000


如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广