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 //指向参数长度缓冲区的指针
);
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

C#连接六类数据库的代码集 本文列出了C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase六种不同数据库的程序源码

db2sql报错代码大全

sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +0...

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

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

DB2错误代码大全

db2 错误代码大全

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

-Db2 例子 create table mynumber(id int,name varchar(10))insert into mynumber values(1,'no1')insert int...

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

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

db2错误代码信息

Ctrl+F查找相应代码: db2错误代码信息以备需要的时候查阅. sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完...
  • qq8618
  • qq8618
  • 2013-10-18 12:46
  • 2506

[SQL]DB2数据库操作常见错误代码及分析

格式说明:ErrorCode:-302 SQLState:22001 -------------------------------------------  000 00000 SQL语句成功完...

DB2代码 错误信息描述

DB2错误信息(按sqlcode排序)                      ...

DB2常见代码错误

sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +0...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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