db2 clt 代码

原创 2015年07月10日 14:06:34
/* 数据库表结构说明 */
colno   colname     coltype
0       AP_ID       char(12)
1       AP_KEY_C    char(32) for bit data //对该字段有特殊的约束 二进制保存
2       AP_KEY_V    char(32)

/******************a.c*********************/
#include<stdio.h>
#include<string.h>
#include<sqlcli1.h>

int main()
{
    SQLHANDLE EnvHandle = 0;
    SQLHANDLE ConHandle = 0;
    SQLHANDLE StmtHandle = 0;
    SQLRETURN RetCode = SQL_SUCCESS;

    SQLCHAR SQLStmt[255];
    SQLCHAR str1[16];
    SQLCHAR str2[33];
    SQLCHAR str3[33];    
    SQLLEN *len = 0;

    SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&EnvHandle);

    if(EnvHandle != 0)
        SQLSetEnvAttr(EnvHandle,SQL_ATTR_ODBC_VERSION,
                      (SQLPOINTER) SQL_OV_ODBC3,SQL_IS_UINTEGER);

    if(EnvHandle != 0)
        SQLAllocHandle(SQL_HANDLE_DBC,EnvHandle,&ConHandle);

    if(ConHandle != 0)
        RetCode = SQLConnect(ConHandle,(SQLCHAR *) "<数据库名>",
                             SQL_NTS , (SQLCHAR *) "<用户名>",
                             SQL_NTS , (SQLCHAR *) "<密码>",
                             SQL_NTS);                        
    if(ConHandle != 0 && RetCode == SQL_SUCCESS)
        SQLAllocHandle(SQL_HANDLE_STMT,ConHandle,&StmtHandle);

   /*############  SELECT BEGIN  ###########*/
    strcpy((char *) SQLStmt,"SELECT  AP_KEY_C , AP_KEY_V from YANGDB.YANG_TEST  where AP_ID = ?") ;

    RetCode = SQLPrepare(StmtHandle,SQLStmt,SQL_NTS);

    RetCode = SQLBindParameter(StmtHandle,1,SQL_PARAM_INPUT,SQL_C_CHAR,                               SQL_CHAR,sizeof(str1),0,str1,sizeof(str1),NULL);//1:sql语句中第一个'?'参数, 0: 在数据库中属于第一列(从0开始)

    strcpy((char *) str1,"3");
    memset((char *) str2,0x00,sizeof(str2));
    memset((char *) str3, 0x00,sizeof(str3));

    RetCode = SQLExecute(StmtHandle);

    if(RetCode == SQL_ERROR)
        printf("sql exec error\n");   
    if(RetCode == SQL_SUCCESS)                           
    {
       SQLBindCol(StmtHandle,1,SQL_C_BINARY,(SQLPOINTER) str2,sizeof(str2),NULL);//1:select语句中返回字段的顺序 SQL_C_BINARY:因为在数据库中是2进制表示(for bit data决定以2进制存储) 若结果是"1234",使用SQL_C_CHAR则会变成"31323334"  asci(31)为'1' 
        SQLBindCol(StmtHandle,2,SQL_C_CHAR,(SQLPOINTER) str3,sizeof(str3),NULL); //普通的char类型,没有其他约束                          
        while (RetCode != SQL_NO_DATA) {
             RetCode = SQLFetch(StmtHandle);
             if(RetCode != SQL_NO_DATA)
                printf("%s %s\n",str2,str3);
        }
    }

/*############  SELECT END  ###########*/

/*############  INSERT BEGIN  ###########*/

    strcpy((char *) SQLStmt,"INSERT INTO YANGDB.YANG_TEST ( AP_ID,AP_KEY_C , AP_KEY_V) VALUES ( ? , ? , ? )") ;  
    RetCode = SQLPrepare(StmtHandle,SQLStmt,SQL_NTS);

    /*绑定参数*/
    RetCode = SQLBindParameter(StmtHandle,1,SQL_PARAM_INPUT,SQL_C_CHAR,                               SQL_CHAR,sizeof(str1),0,str1,sizeof(str1),NULL);                    
    RetCode = SQLBindParameter(StmtHandle,2,SQL_PARAM_INPUT,SQL_C_CHAR,                               SQL_CHAR,sizeof(str2),1,str2,sizeof(str2),NULL);                                                       
    RetCode = SQLBindParameter(StmtHandle,3,SQL_PARAM_INPUT,SQL_C_CHAR,                               SQL_CHAR,sizeof(str3),2,str3,sizeof(str3),NULL);

    /*赋初值*/
    memcpy(str1,"1234",4);
    memcpy(str2,"1234",4);
    memcpy(str3,"1234",4);

RetCode = SQLExecute(StmtHandle);    
    if(RetCode == SQL_ERROR)
        printf("sql exec error\n");

/*############  INSERT END  ###########*/

    /*############  断开连接  ###########*/ 
    RetCode = SQLEndTran(SQL_HANDLE_DBC,ConHandle,SQL_COMMIT);

    if(StmtHandle != 0)
        SQLFreeHandle(SQL_HANDLE_STMT,StmtHandle);

    if(ConHandle != 0)
        RetCode = SQLDisconnect(ConHandle);  

    if(ConHandle != 0)
        SQLFreeHandle(SQL_HANDLE_DBC,ConHandle); 

    if(EnvHandle != 0) 
        SQLFreeHandle(SQL_HANDLE_ENV,EnvHandle);  

    return 0;                        
}

编译: AIX环境 cc -L/app/usr/xxx/sqllib/lib32
-I/app/usr/xxx/sqllib/include/ -ldb2 a.c -o test
执行: ./test


SQLBindParameterSQLBindParameter (
    SQLHSTMT StatementHandle, //语句句柄
    SQLUSMALLINT ParameterNumber,//语句中的参数标记编号(从 1 开始顺序计数)
    SQLSMALLINT ParamType,/*参数类型。以下类型之一:
                            SQL_PARAM_INPUT
                            SQL_PARAM_INPUT_OUTPUT
                            SQL_PARAM_OUTPUT*/
    SQLSMALLINT CType,//C语言对应的数据类型的参数。
    SQLSMALLINT SqlType,//SQL 数据类型的参数
    SQLULEN ColDef, //列或参数标记表达式的大小
    SQLSMALLINT Scale,//列或参数标记表达式的小数位数
    SQLPOINTER rgbValue,//指向参数数据缓冲区的指针。
    SQLLEN cbValueMax,//rgbValue 缓冲区的长度
    SQLLEN * StrLen_or_Ind //指向参数长度缓冲区的指针
);

【转】DB2+AIX 字符集问题

出处:http://www.db2china.net/home/space.php?uid=29548&do=blog&id=14179 字符,字符集与字符编码: 起步知识是知道字符,字符...
  • u012272207
  • u012272207
  • 2015年05月18日 22:44
  • 1276

Java连接db2数据库(常用数据库连接五)

1.安装好db2数据库,并建立表如下: 2.eclipse或myeclipse中建立工程并导入java连接db2所需要的jar包db2java.jar 下载地址:http://download.c...
  • whzhaochao
  • whzhaochao
  • 2013年10月18日 17:09
  • 4337

基于C语言的DB2数据库开发

如有转载,请注明出处:http://blog.csdn.net/embedded_sky 作者:super_bert@csdn 基于C语言的DB2数据库开发...
  • qq302501035
  • qq302501035
  • 2015年08月18日 13:52
  • 2123

db2sql报错代码大全

sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +0...
  • BinZor
  • BinZor
  • 2017年04月20日 13:41
  • 301

C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase数据库的代码集

C#连接六类数据库的代码集 本文列出了C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码...
  • u014180504
  • u014180504
  • 2014年12月05日 08:39
  • 1175

DB2字符集和代码页设置常识

DB2中采用代码方式指定字符集,有些困惑,所以特地整理了如下两张表,由于偶们是中国人,所以就不列多余的字符集啦,下面仅仅列出PRC的字符集,这样建库指定字符集和代码页就不会迷糊了,而且字符集往往困扰了...
  • marvelyu
  • marvelyu
  • 2012年03月02日 17:35
  • 6190

DB2 IXF文件导入代码集不兼容浅析

一、两个数据库代码集不同导致导入失败(此处采用创建一个与源数据库相同代码集的数据库来解决) 1、问题:db2 import from g:/a.ixf of ixf create into test_...
  • wlei1825928
  • wlei1825928
  • 2015年09月09日 11:15
  • 664

DB2、oralce、mysql数据库取前十条记录代码

-Db2 例子 create table mynumber(id int,name varchar(10))insert into mynumber values(1,'no1')insert int...
  • hongtashan11
  • hongtashan11
  • 2011年05月21日 14:42
  • 768

DB2错误代码大全

  • 2015年09月12日 21:26
  • 29KB
  • 下载

db2错误代码.doc

  • 2013年07月28日 23:36
  • 77KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:db2 clt 代码
举报原因:
原因补充:

(最多只允许输入30个字)