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

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

 #include <iostream>
#include <occi.h>
#include <json.h>
#pragma comment(lib,"oraocci12.lib")
#pragma comment(lib,"json_vc71_libmt.lib")
using namespace std;
using namespace oracle::occi; int main()
{
  //初始化occi对象
  Environment *env = NULL;
  Connection *conn = NULL;
  Statement *stmt = NULL;
  ResultSet *res = NULL;   try
  {
    char usrName[] = "shaqima";
    char usrPwd[] = "userpwd";
    char connectStr[] = "10.10.82.25:1521/orcl";
    //创建连接环境
    env = Environment::createEnvironment();
    //连接到数据库
    conn = env->createEnvironment(usrName,usrPwd,connectStr);
    if(!conn)
    {
      cout <<"error: connect failed!"<<endl;
      return ;
    }     //oracle sql语句
    char sqlStr[] = "select * from DEVICE_INFO t where t.ID=:1";
    stmt = conn->createStatement(sqlStr);
    //设置sql变量
    stmt->setString(,"");
    //执行sql
    res = stmt->executeQuery();     //初始化jsoncpp对象
    Json::Reader reader;
    //根节点
    Json::Value rootNode;
    //子节点
    Json::Value childNode;     int nodeNum = ;
    //查询出结果集,并存入json节点
    while(res->next())
    {
      childNode["Id"] = res->getInt();
      childNode["AssetCode"] = res->getString();
      childNode["EncryptDrive"] = res->getString();
      //将子节点挂载到根节点
      rootNode[nodeNum] = Json::Value(childNode);
      nodeNum++;
    }     cout<<"使用.toStyledString()转换为标准json格式:"<<endl;
    cout<<rootNode.toStyledString()<<endl;     Json::FastWriter fw;
    cout<<"转换成易于传输的josn字符串格式"<<endl;
    cout<<fw.write(rootNode)<<endl;
  }
  catch(SQLException ex)
  {
    cout<<"ErrorCode:"<<ex.getErrorCode()<<endl;
    cout<<"ErrorMsg:"<<ex.getMessage()<<endl;
  }
  //释放资源
  stmt->closeResultSet(res);
  conn->terminateStatement(stmt);
  env->terminateConnection(conn);
  Environment::terminateEnvironment(env);   system("pause");
  return ;
}

新手指路:

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 增、删、改日后再研究~

C++ OCCI API数据库操作之连接、返回查询结果集为json格式的更多相关文章

  1. SQL SERVER C#数据库操作类(连接、执行SQL)

    using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...

  2. laravel 连接同一服务器上多个数据库操作 、 连接多个不同服务器上的不同数据库操作以及多个数据库操作的事务处理

    !注意:标红的要注意区分开 第一步.配置.env文件(同一服务器上多个数据库) DB_CONNECTION=pgsqlDB_HOST=IP(例如:127.0.0.1)DB_PORT=端口号(例如:54 ...

  3. 将 数据库中的结果集转换为json格式(三)

    从数据库中得到结果集 public String list() throws Exception { Connection con = null; PageBean pageBean = new Pa ...

  4. PHP中把数据库查询结果输出为json格式

    <?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...

  5. Python入门学习教程:数据库操作,连接MySql数据库

    各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和py ...

  6. 解决阿里云轻量级服务器mysql无法用数据库操作软件连接

    第一步:去阿里云购买一台轻量应用服务器Lamp然后登录到控制台点击应用详情 点击后你可以看到一些服务器的数据 首先是访问服务器的首页地址,默认会放一个html文件在网站根目录下(即/home/www/ ...

  7. JAVA数据库处理(连接,数据查询,结果集返回)

    package john import java.io.IOException; import java.util.*; public class QueryDataRow { public Hash ...

  8. laravel 数据库操作之 DB facade & 查询构造器 & Eloquent ORM

    <?php namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class S ...

  9. yii学习笔记(7),数据库操作,联表查询

    在实际开发中,联表查询是很常见的,yii提供联表查询的方式 关系型数据表:一对一关系,一对多关系 实例: 文章表和文章分类表 一个文章对应一个分类 一个分类可以对应多个文章 文章表:article 文 ...

随机推荐

  1. db2建立类似oracle的dblink

    db2 catalog tcpip node rmt_node remote 127.0.0.1 server 50000; --db2 catalog database rmt_db as rmt_ ...

  2. [转]Firefox+Burpsuite抓包配置(可抓取https)

    0x00 以前一直用的是火狐的autoproxy代理插件配合burpsuite抓包 但是最近经常碰到开了代理却抓不到包的情况 就换了Chrome的SwitchyOmega插件抓包 但是火狐不能抓包的问 ...

  3. [转]11种常见sqlmap使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

  4. python网络socket编程

    一.服务端 #!/usr/bin/python # -*- coding: UTF-8 -*- import socket import sys from thread import * HOST = ...

  5. 在Tomcat中部署Spring jpetstore

    第三篇:在Tomcat中部署Spring jpetstore 博客分类: Java之web SpringTomcatMySQLJDBCMVC  Spring samples中的jpetstore,基于 ...

  6. Django 文章标签功能

    使用第三方框架django-taggit为模型添加标签功能,此模块是一个可复用的应用 首先安装 https://github.com/alex/django-taggit 这是项目主页 pip ins ...

  7. App上架流程[利用Archive进行上传]

    作者 M_Lee2016.01.22 10:47 写了14852字,被32人关注,获得了49个喜欢 [iOS]App上架流程[利用Archive进行上传] 字数2186 阅读507 评论3 喜欢9 今 ...

  8. spring学习 五 依赖注入的方式

    依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<b ...

  9. Mac 环境通用

    mac 下更新 .bash_profile 文件 1.打开terminal(终端) 2.cd ~ ( 进入当前用户的home目录) 3.open .bash_profile (打开.bash_prof ...

  10. 20155312 2016-2017-2 《Java程序设计》第八周学习总结

    20155312 2016-2017-2 <Java程序设计>第八周学习总结 课堂内容总结 学习模式 游乐园模式-荒野求生模式 学习方法 以代码为中心->遇到不会的类和方法(参数等) ...