unixODBC连接DB2

          使用unixODBC连接DB2其实也是很方便的,虽然这样没有Embeded SQL那么高效,但是可以有效解决因数据库操作代码变更带来的版本控制的烦恼。以下是unixODBC连接数据库一个简单实例。

testODBCConnectDB2.c:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "sql.h"
#include "sqlext.h"

int main(void)
{
        SQLHENV         henv;//环境句柄
        SQLHDBC         hdbc;//连接句柄
        SQLHSTMT        hstmt;//语句句柄
        SQLINTEGER      len;
        SQLCHAR         szName[50];
        SQLRETURN       ret;
        SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
        SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
        SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

        if ((ret = SQLConnect(hdbc, (SQLCHAR *)"testdb", SQL_NTS, (SQLCHAR *) "linxj", SQL_NTS, (SQLCHAR *) "123456", SQL_NTS)) == SQL_ERROR)//连接数据库
        {
                printf("SQLConnect Error !\n");
                return(-1);
        }

        SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt);

        if ((ret = SQLExecDirect(hstmt, (SQLCHAR *) "select name from user", SQL_NTS)) == SQL_ERROR)// 执行语句
        {
                printf("SQLExecDirect Error !\n");
                return(-2);
        }

        while (SQL_NO_DATA != SQLFetch(hstmt))
        {
                SQLGetData (hstmt, 1, SQL_C_CHAR, szName, 50, &len);//读取数据
                printf("%s\n", szName);
        }

        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
        SQLDisconnect(hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
        SQLFreeHandle(SQL_HANDLE_ENV, henv);        return(0);
}

makefile:

#DB2PATH为DB的安装目录

INCL = -I $(DB2PATH)/include

all:    makeall                 \
        testodbc                \
        clean

DEFINES = -m32 -D _LINUX_

.SUFFIXES:.c.o
.c.o:
        $(CC) $(DEFINES) $(INCL) -c $*.c

objs=   testODBCConnectDB2.o

makeall:        $(objs)

testodbc:       $(null)
        gcc -o testodbc $(objs) -lncurses -lrt -lpthread -L $(DB2PATH)/lib32 -ldb2

clean:
        rm -rf *.o

猜你喜欢

转载自blog.csdn.net/goodstudy168/article/details/8627014
db2
今日推荐