⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个Oracle OCI编程接的C++封装
💻 CPP
字号:
/*H***************************************************************************
File            : main.cpp
Subsystem       : 
Function Name(s):

Description     : Testing TinyOci
Author          : Ben
Date            : 2002.05.22
Revision        : 

History
-------
2002.05.22      Ben     Create

Copyright (c) ShenZhen COMEXE Communication Technology Co. Ltd.  
***************************************************************************H*/
#include <stdlib.h>
#include <string.h>
#include "tinyoci.h"

/*
--
-- 测试用例表
--
create table tinyoci
(
   num_1         number(10),
   num_2         number(5,3),
   char_3        char,
   varchar2_4    varchar2(20),
   date_5        date,
   float_6       float,
   real_7        real
);
*/

int main( int argc, char *argv[] )
{
    long lTotal;
    short nRc;
    TinyOci TinyDb;
    char szError[512];
    CMXList< CMXList<CMXString> > RowsList;
    CMXList<CMXString> *pFieldsList;
    CMXString *pField;
    LIST_CURSOR cur1,cur2;

    // 测试用的SQL
    //const char *szSql = "SELECT * FROM netinfo";
    //const char *szSql = "SELECT * FROM trouble";
    //const char *szSql = "SELECT * FROM tinyoci";
    //const char *szSql = "SELECT * FROM tinyoci WHERE num_1=:num_1";
    const char *szSql = "INSERT INTO tinyoci( num_1, varchar2_4 ) VALUES ( :num_1, :varchar2_4 )";
    long num_1[10];          // 可以同时执行10次,取不同的值。
    char varchar2_4[10][80];
    long out_num_1[10];          // 可以同时执行10次,取不同的值。
    char out_varchar2_4[10][80];

    // 初始化部分
    if( !TinyDb.Init() )
        return -1;
    if( !TinyDb.Connect( "mydb", "obs", "123456" ) )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }
    if( !TinyDb.SetDateFormat() )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }

    // 如果有需要的话,应该在Execute之前调用SetMaxFetch。
    // 如果在Execute之后调用SetMaxFetch的话,MaxFetch的值
    // 必须小于“输出数组”的下标值,否则超出“输出数组”的
    // 范围(数组越界),将导致CORE DUMP !
    TinyDb.SetMaxFetch( 3 );

    // 如果有需要的话,可以设置输入变量:
    // bool PushBindList( const char *pszName, ub2 DateType, long lSize, void *pValue );
    // 其中pszName为输入变量在SQL中名称(包括冒号':')。
    if( !TinyDb.PushBindList( ":num_1", SQLT_INT, sizeof(num_1[0]), &num_1[0] ) )
        return -1;
    if( !TinyDb.PushBindList( ":varchar2_4", SQLT_STR, sizeof(varchar2_4[0]), varchar2_4[0] ) )
        return -1;

    // 如果设置了输入变量,则应该为输入变量赋值:
    memset( &num_1[0], 0, sizeof( num_1 ) );
    num_1[0] = 17; 
    num_1[1] = 18; 
    num_1[2] = 19; 
    num_1[3] = 20;
    strcpy( varchar2_4[0], "Array Bind 17" );
    strcpy( varchar2_4[1], "Array Bind   18" );
    strcpy( varchar2_4[2], "Array Bind     19" );
    strcpy( varchar2_4[3], "Array Bind 20" );

    // Execute方法有一个缺省参数nIter,表示对非SELECT语句重复执行的次数:
    // bool  Execute( const char *pszSql, int nIter=1 );
    //
    if( !TinyDb.Execute( szSql, 4 ) )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }
    if( !TinyDb.Commit() )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }

    // 执行INSERT后回显一次
    //
    // 下一次执行Execute前应该清除前一次的所有绑定    
    //
    if( !TinyDb.ResetList() )
        return false;

    // 如果有需要的话,可以设置输出变量:
    // bool PushDefineList( const char *pszName, ub2 DataType, long lSize, void *pValue );
    // 其中pszName为输入变量在SQL中名称,该名称不影响SQL的执行,只是作为一个索引,就是说,
    // 它可以是你所喜欢任何字符串(一般为字段名)。
    //
    // DataType只能取以下的值:
    //           SQLT_FLT
    //           SQLT_INT
    //           SQLT_STR
    // 这里建立的DefineList的顺序必须与SELECT语句的结果集的字段顺序相一致 !!
    //
    if( !TinyDb.PushDefineList( "out_num_1", SQLT_INT, sizeof(out_num_1[0]), &out_num_1[0] ) )
        return -1;
    if( !TinyDb.PushDefineList( "out_varchar2_4", SQLT_STR, sizeof(out_varchar2_4[0]), &out_varchar2_4[0] ) )
        return -1;
    memset( &out_num_1[0], 0, sizeof( out_num_1 ) );
    memset( &out_varchar2_4[0], 0, sizeof( out_varchar2_4 ) );
    // 请在Execute->Fetch之后,用QickWatch查看以上两个“输出变量”。

    // 执行
    if( !TinyDb.Execute( "SELECT num_1, varchar2_4 FROM tinyoci" ) )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }
    
    lTotal = 0;
    nRc    = TinyDb.Fetch( RowsList );
    printf("\n\r");
    while( ( TINYOCI_FETCH_MORE == nRc ) ||
           ( TINYOCI_FETCH_DONE == nRc ) )
    {
        pFieldsList = RowsList.GetFirst( &cur1 );
        while( NULL != pFieldsList )
        {
            pField = pFieldsList->GetFirst( &cur2 );
            while( NULL != pField )
            {
                printf( "%s\t", pField->C_str() );
                pField = pFieldsList->GetNext( &cur2 );
            }
            printf("\n\r");

            pFieldsList = RowsList.GetNext( &cur1 );
        }

        lTotal += RowsList.GetCount();
        RowsList.DestroyList();

        if( TINYOCI_FETCH_DONE == nRc )
            break;
        nRc = TinyDb.Fetch( RowsList );
    }
    printf("\nTotal %ld records", lTotal );

    if( !TinyDb.Disconnect() )
    {
        TinyDb.GetError( szError );
        printf( "\n%s", szError );
        return -1;
    }

    return 0;
}











// End Of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -