C++ OCCI API数据库操作之连接、返回查询结果集为json格式
使用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格式的更多相关文章
- SQL SERVER C#数据库操作类(连接、执行SQL)
using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...
- laravel 连接同一服务器上多个数据库操作 、 连接多个不同服务器上的不同数据库操作以及多个数据库操作的事务处理
!注意:标红的要注意区分开 第一步.配置.env文件(同一服务器上多个数据库) DB_CONNECTION=pgsqlDB_HOST=IP(例如:127.0.0.1)DB_PORT=端口号(例如:54 ...
- 将 数据库中的结果集转换为json格式(三)
从数据库中得到结果集 public String list() throws Exception { Connection con = null; PageBean pageBean = new Pa ...
- PHP中把数据库查询结果输出为json格式
<?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...
- Python入门学习教程:数据库操作,连接MySql数据库
各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和py ...
- 解决阿里云轻量级服务器mysql无法用数据库操作软件连接
第一步:去阿里云购买一台轻量应用服务器Lamp然后登录到控制台点击应用详情 点击后你可以看到一些服务器的数据 首先是访问服务器的首页地址,默认会放一个html文件在网站根目录下(即/home/www/ ...
- JAVA数据库处理(连接,数据查询,结果集返回)
package john import java.io.IOException; import java.util.*; public class QueryDataRow { public Hash ...
- laravel 数据库操作之 DB facade & 查询构造器 & Eloquent ORM
<?php namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class S ...
- yii学习笔记(7),数据库操作,联表查询
在实际开发中,联表查询是很常见的,yii提供联表查询的方式 关系型数据表:一对一关系,一对多关系 实例: 文章表和文章分类表 一个文章对应一个分类 一个分类可以对应多个文章 文章表:article 文 ...
随机推荐
- python 读取xml
#!/usr/bin/python # -*- coding: UTF- -*- from xml.dom.minidom import parse import xml.dom.minidom # ...
- How-to Install VMware Tools on Debian Stretch 9 32/64bit Linux+GNU
在虚拟机VMWARE上安装debian9 安装vmwaretools时候遇到问题 询问我IFCONFIG安装在哪里? 新版的debian不知道是用户权限问题还是使用了其他网络配置工具 vmwareto ...
- linux的!的用法
!的用法:1.!!:代表上一条命令,如下: 示例一: ./some-shell-command cat !! (相当于cat ./some-shell-command) 示例二: cd /user ! ...
- java15
1.数组 格式:数据类型 [ ] 数据名称 = new 数据类型 [ ] { }: 2.初始化 静态初始化(已知要开多少个房间来存储数据) int[ ] a =new int[ ] {12,32,54 ...
- 几张图片帮助记忆docker基本原理(转)
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotC ...
- 回文日期(NOIP2016)
题目:回文日期 这题虽然说不难,但是也不能算水了. 我先讲讲思路.60分的算法很好写,就是判断一下是不是回文串,分离每个数位,判断即可. 但我们的目标是满分,所以我来讲讲满分算法. 首先,给的是区间, ...
- 如何使用GCC生成动态库和静态库
根据链接时期的不同,库又有静态库和动态库之分.静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行.而动态库是在程序执行的时候被链接的.程序执行完,库仍需 ...
- Django框架之Ajax和form组件
一.Django框架之查漏补缺 1)models,字段概况 name = models.CharField(max_length=) age = models.IntegerField() price ...
- clion配置c/c++环境
打开这个界面 点击添加Cygwin选择下载的Cygwin在进行下面的配置 去网站https://www.cygwin.com/选择路径即可(这里只写了配置过程中的关键步骤并且附上IDE的链接直接安装 ...
- javascript捕获页面窗口关闭事件
javascript捕获窗口关闭事件有两种方法 onbeforeunload() ,onUnload() 用法有两种: 1. function window.onbefore ...