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

📄 dbapi_query.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: dbapi_query.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:22:24  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5 * PRODUCTION * =========================================================================== *//*  $Id: dbapi_query.cpp,v 1000.1 2004/06/01 19:22:24 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** File Name:  $Id: dbapi_query.cpp,v 1000.1 2004/06/01 19:22:24 gouriano Exp $** File Description: Implementation of dbapi language call* $Log: dbapi_query.cpp,v $* Revision 1000.1  2004/06/01 19:22:24  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5** Revision 1.5  2004/05/17 21:17:29  gorelenk* Added include of PCH ncbi_pch.hpp** Revision 1.4  2003/08/05 19:23:58  vakatov* MSSQL2 --> MS_DEV1** Revision 1.3  2002/12/09 16:25:22  starchen* remove the text files from samples** Revision 1.2  2002/09/04 22:20:41  vakatov* Get rid of comp.warnings** Revision 1.1  2002/07/18 15:49:39  starchen* first entry***============================================================================*/#include <ncbi_pch.hpp>#include <dbapi/driver/driver_mgr.hpp>char* getParam(char tag, int argc, char* argv[], bool* flag= 0);USING_NCBI_SCOPE;//The following function illustrates a dbapi language callint main(int argc, char* argv[]){    string query;    I_DriverContext* my_context;    string server_name;    string driver_name;    const char* p = NULL;    char* txt_buf = NULL ;    long len_txt = 0;        //    Read args from a command line:     p= getParam('S', argc, argv);    if(p) server_name = p;    p= getParam('d', argc, argv);    if(p) driver_name = p;    if ( p == NULL) {       cout << endl << "usage: for Sybase dblib: -S STRAUSS -d dblib" << endl             << "for Sybase ctlib: -S STRAUSS -d ctlib" << endl            << "for MSSQL: -S MS_DEV1 -d ftds" << endl << endl;    }        //    Driver Manager allowes you to change a type of SQL server    //    without rebuilding your program.    //    Driver's types:    //         ctlib - to work with Sybase SQL Server (ct_ library);    //         dblib - to work with Sybase SQL Server (db library);    //         ftds  - to work with MS SQL Server.        try {        C_DriverMgr drv_mgr;        string err_msg;        my_context = drv_mgr.GetDriverContext (driver_name, &err_msg);        if(!my_context) {            cout << "Can not load a driver " << driver_name << " ["                  << err_msg << "] " << endl;            return 1;        }        //    Connect to the server:        CDB_Connection* con = my_context->Connect (server_name, "anyone", "allowed", 0);               //    Change default database:        CDB_LangCmd* lcmd = con->LangCmd("use DBAPI_Sample");        lcmd->Send();        while (lcmd->HasMoreResults()) {            CDB_Result* r = lcmd->Result();            if (!r) {                continue;            }            delete r;        }        //    Sending a query:        query = "select int_val,fl_val,date_val,str_val,txt_val from SelectSample";        lcmd = con->LangCmd(query);        lcmd->Send();        //    Fetching  results:        while (lcmd->HasMoreResults()) {            CDB_Result* r = lcmd->Result();            if (!r) continue;                        if (r->ResultType() == eDB_RowResult) {                while (r->Fetch()) {                    cout << "<ROW>"<< endl;                    for (unsigned int j = 0;  j < r->NofItems(); j++) {                     //    Determination of data type:                     EDB_Type rt = r->ItemDataType(j);                     const char* iname= r->ItemName(j);                     //    Printing to stdout:                     if(iname == 0) iname= "";                     cout  << iname << '=';                     //    Fetching of char or varchar data type:                     //    note that object type of CDB_Char is for a 1 -byte char and                     //    object type of CDB_VarChar can't be more then 255 bytes.                     if (rt == eDB_Char || rt == eDB_VarChar) {                         CDB_VarChar str_val;                         r->GetItem(&str_val);                         cout << (str_val.IsNULL()? "{NULL}" : str_val.Value()) << endl << endl ;                     //    Fetching of integer data type:                     //    note that object type of CDB_Int is for a 4- bytes int                     //    object type of CDB_SmallInt is for the 2- bytes int                     //    object type of CDB_TinyInt is for the 1- byte int.                     } else if (rt == eDB_Int ||                                rt == eDB_SmallInt ||                                rt == eDB_TinyInt) {                         CDB_Int int_val;                         r->GetItem(&int_val);                         if (int_val.IsNULL()) {                             cout << "{NULL}";                         } else {                             cout << int_val.Value() << endl << endl ;                         }                      //    Fetching of real data type:                        //    note that                        //    object type of CDB_Float is for the 4-bytes float data type                      } else if (rt == eDB_Float) {                            CDB_Float fl_val;                            r->GetItem(&fl_val);                            if(fl_val.IsNULL()) {                                cout << "{NULL}";                            } else {                                cout << fl_val.Value() << endl<< endl ;                            }                      //    Fetching of float data type:                        //    note that                        //    object type of CDB_Double is for a 8-byte float data type.                      } else if (rt == eDB_Double) {                            CDB_Double fl_val;                            r->GetItem(&fl_val);                            if(fl_val.IsNULL()) {                                cout << "{NULL}";                            } else {                                cout << fl_val.Value() << endl<< endl ;                            }                      //    Fetching of datetime data type:                      //    note that object of type CDB_DateTime is for a datetime4 (8 bytes) data type                      //    object type of CDB_SmallDateTime is for a datetime (4 bytes) data type.                      } else if (rt == eDB_DateTime ||                                 rt == eDB_SmallDateTime) {                            CDB_DateTime date_val;                            r->GetItem(&date_val);                            if(date_val.IsNULL()) {                                cout << "{NULL}";                            } else {                                cout << date_val.Value().AsString() << endl<< endl ;                            }                        //    Fetching of text data type:                       //    if you need to fetch an image                        //    you have to use CDB_Image type of object                       } else if (rt == eDB_Text){                            CDB_Text text_val;                            r->GetItem(&text_val);                            if(text_val.IsNULL()) {                                cout << "{NULL}";                            } else {                                txt_buf = ( char*) malloc (text_val.Size());                                len_txt = text_val.Read (( char*)txt_buf, text_val.Size());                                cout << txt_buf << endl<< endl ;                            }                        } else {                            r->SkipItem();                            cout << "{unprintable}";                        }                    }                    cout << "</ROW>" << endl << endl;                }                delete r;            }        }        delete lcmd;        delete con;    } catch (CDB_Exception& e) {        CDB_UserHandler_Stream myExHandler(&cerr);                myExHandler.HandleIt(&e);        return 1;    }    return 0;}

⌨️ 快捷键说明

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