• C++ OCCI API数据库操作之连接、返回查询结果集为json格式


    使用C++操作数据库,转换返回结果集为json格式,易于解析。

    以下程序的编译、运行环境:Windows 10 1803、VS2017 17.5.2(vc14)、解决方案配置:Release、解决方案平台:X86

     1 #include <iostream>
     2 #include <occi.h>
     3 #include <json.h>
     4 #pragma comment(lib,"oraocci12.lib")
     5 #pragma comment(lib,"json_vc71_libmt.lib")
     6 using namespace std;
     7 using namespace oracle::occi;
     8 
     9 int main()
    10 {
    11   //初始化occi对象
    12   Environment *env = NULL;
    13   Connection *conn = NULL;
    14   Statement *stmt = NULL;
    15   ResultSet *res = NULL;
    16     
    17   try
    18   {
    19     char usrName[] = "shaqima";
    20     char usrPwd[] = "userpwd";
    21     char connectStr[] = "10.10.82.25:1521/orcl";
    22     //创建连接环境
    23     env = Environment::createEnvironment();
    24     //连接到数据库
    25     conn = env->createEnvironment(usrName,usrPwd,connectStr);
    26     if(!conn)
    27     {
    28       cout <<"error: connect failed!"<<endl;
    29       return 0;
    30     }
    31 
    32     //oracle sql语句
    33     char sqlStr[] = "select * from DEVICE_INFO t where t.ID=:1";
    34     stmt = conn->createStatement(sqlStr);
    35     //设置sql变量
    36     stmt->setString(1,"1");
    37     //执行sql
    38     res = stmt->executeQuery();
    39 
    40     //初始化jsoncpp对象
    41     Json::Reader reader;
    42     //根节点
    43     Json::Value rootNode;
    44     //子节点
    45     Json::Value childNode;
    46 
    47     int nodeNum = 0;
    48     //查询出结果集,并存入json节点
    49      while(res->next())
    50     {
    51       childNode["Id"] = res->getInt(1);
    52       childNode["AssetCode"] = res->getString(2);
    53       childNode["EncryptDrive"] = res->getString(3);
    54       //将子节点挂载到根节点
    55       rootNode[nodeNum] = Json::Value(childNode);
    56       nodeNum++;
    57     }
    58 
    59     cout<<"使用.toStyledString()转换为标准json格式:"<<endl;
    60     cout<<rootNode.toStyledString()<<endl;
    61 
    62     Json::FastWriter fw;
    63     cout<<"转换成易于传输的josn字符串格式"<<endl;
    64     cout<<fw.write(rootNode)<<endl;
    65   }    
    66    catch(SQLException ex)
    67   {
    68     cout<<"ErrorCode:"<<ex.getErrorCode()<<endl;
    69     cout<<"ErrorMsg:"<<ex.getMessage()<<endl;
    70   }  
    71   //释放资源
    72   stmt->closeResultSet(res);
    73   conn->terminateStatement(stmt);
    74   env->terminateConnection(conn);
    75   Environment::terminateEnvironment(env);
    76 
    77   system("pause");
    78   return 1;
    79 }

     新手指路:

    1、occi.h从Oracle instantclient-sdk-12.2.0.1.0中可获得。

    OCCI 头文件包括:occi.h、occiCommon.h、occiControl.h、occiData.h、occiObjects.h,将所有文件置于同一引用目录下,项目中只需要引用occi.h即可。

    2、oraocci12.lib是静态库,从Oracle instantclient-sdk-12.2.0.1.0中可获得,使用vc14目录下的oraocci12.lib。

    3、我使用的是开源jsoncpp,从https://sourceforge.net/projects/jsoncpp/下载,jsoncpp头文件在jsoncpp-src-0.5.0/include/json下将所有文件置于同一引用目录下,项目中只需要引用json.h即可。

    4、需要在本地计算机编译以获得json_vc71_libmt.lib,打开jsoncpp-src-0.5.0/makefiles/vs71/jsoncpp.sln项目,lib_json右键-属性,设置编译环境:

    ①“配置属性-常规-Windows SDK版本”,与项目设置一致

    ②“配置属性-常规-全程序优化”,设置为:无全程序优化

    ③“配置属性-C/C++-所有选项-运行库”,与项目设置一致

    ④解决方案配置、解决方案平台,与项目设置一致

    编译成功后,在jsoncpp-src-0.5.0/build/vs71/release/lib_json/下为编译之后的文件(debug/下的为json_vc71_libmtd.lib),其中的.obj、.asm文件必须与.lib文件在同一目录下,请注意。

    使用C++ OCCI API 增、删、改日后再研究~

  • 相关阅读:
    Java并发编程:线程池的使用
    AlarmManager与PendingIntent
    ConnectivityManager与检查网络连接的使用
    IntentService的使用
    Service(Local Service)简介
    Looper、Hander、HandlerThread
    XML_PULL解析
    android AsyncTask 的使用(转载)
    android 连接网络的简单实例
    xml drawable
  • 原文地址:https://www.cnblogs.com/seanyan/p/10081828.html
Copyright © 2020-2023  润新知