如果您想了解c++调用occi访问oracle和c++调用ocx的知识,那么本篇文章将是您的不二之选。我们将深入剖析c++调用occi访问oracle的各个方面,并为您解答c++调用ocx的疑在这篇文
如果您想了解c++ 调用 occi 访问 oracle和c++ 调用ocx的知识,那么本篇文章将是您的不二之选。我们将深入剖析c++ 调用 occi 访问 oracle的各个方面,并为您解答c++ 调用ocx的疑在这篇文章中,我们将为您介绍c++ 调用 occi 访问 oracle的相关知识,同时也会详细的解释c++ 调用ocx的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- c++ 调用 occi 访问 oracle(c++ 调用ocx)
- C++ OCCI API数据库操作之连接、返回查询结果集为json格式
- For oracle databases, if the top showing the oracle database, then oracle process is using the top c
- NodeJS-Oracle DB - NJS-040 连接超时,在 ICP 中使用带有 Lopback 的 oracle 驱动程序(loopback-connector-oracle)
- OCCI 上载空间数据
c++ 调用 occi 访问 oracle(c++ 调用ocx)
//头文件
#include "stdafx.h"
#include "occi.h"
#include "occiCommon.h"
#include "occiControl.h"
#include "occiData.h"
#include "occiObjects.h"
#pragma comment (lib,"../../Lib/2010/oraocci11.lib")
using namespace oracle::occi;
class OcciConection {
public:
OcciConection();
virtual ~OcciConection();
BOOL ExcuteSql(CString strSql);
BOOL Conection();
void OcciDisConection();
CString strUser;
CString strPasswd;
CString strDatabase;
private:
oracle::occi::Environment *env;
oracle::occi::Connection *conn;
};
//实现代码
#include "stdafx.h"
#include "OcciFunction.h"
OcciConection::OcciConection()
{
}
OcciConection::~OcciConection()
{
}
BOOL OcciConection::Conection()
{
CStringA straUser(strUser.GetBuffer(0));
strUser.ReleaseBuffer();
std::string user=straUser.GetBuffer(0);
straUser.ReleaseBuffer();
CStringA straPasswd(strPasswd.GetBuffer(0));
strPasswd.ReleaseBuffer();
std::string passwd=straPasswd.GetBuffer(0);
straPasswd.ReleaseBuffer();
CStringA straDatabase(strDatabase.GetBuffer(0));
strDatabase.ReleaseBuffer();
std::string database=straDatabase.GetBuffer(0);
straDatabase.ReleaseBuffer();
env = Environment::createEnvironment();
try
{
conn = env->createConnection(user, passwd, database);
}
catch (SQLException& ex)
{
std::string error=ex.getMessage();
return FALSE;
}
return TRUE;
}
void OcciConection::OcciDisConection()
{
env->terminateConnection (conn);
Environment::terminateEnvironment (env);
}
BOOL OcciConection::ExcuteSql(CString strSql)
{
try
{
CStringA straSql(strSql.GetBuffer(0));
strSql.ReleaseBuffer();
std::string sql=straSql.GetBuffer(0);
straSql.ReleaseBuffer();
Statement *stmt = conn->createStatement(sql);
stmt->executeUpdate();
conn->terminateStatement(stmt);
}
catch (SQLException& ex)
{
std::string error=ex.getMessage();
return FALSE;
}
return TRUE;
}
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 增、删、改日后再研究~
For oracle databases, if the top showing the oracle database, then oracle process is using the top c
Note 805586.1 Troubleshooting Session Administration (Doc ID 805586.1) Note 822527.1 How To Find Where The Memory Is Growing For A Process (Doc ID 822527.1) Note 273646.1 How to diagnose the high cpu utilization of ORACLE.EXE in Windows environment Note 728539.1 Find Blocking Sessions In sqlPLUS Note 61552.1 Troubleshooting Oracle Database Hanging Issues for versions from 7 to 9--Exhaustive Note 164760.1 Detecting and Resolving Locking Conflicts using TopSessionsNodeJS-Oracle DB - NJS-040 连接超时,在 ICP 中使用带有 Lopback 的 oracle 驱动程序(loopback-connector-oracle)
如何解决NodeJS-Oracle DB - NJS-040 连接超时,在 ICP 中使用带有 Lopback 的 oracle 驱动程序(loopback-connector-oracle)?
我正在使用 loopback-connector-oracle 4.1.1 版寻求有关我面临的问题的一些信息。分析如下: 我们有 DB 连接配置,可以使用 json 文件格式的 oracle 连接器使用属性连接到 oracle DB 数据源。 "maxConn": 20,“主机”:DB_HOST, “端口”:DB_PORT, “数据库”:DB_NAME, “密码”:DB_PASSWORD, “用户”:DB_USER, "connector": "oracle",
有两个进程/pod 正在运行,每个进程/pod 都有自己的池供oracle 连接器使用。发生的情况是,在一个实例中,oracle 能够连接并处理请求,但在第二个 pod/进程中,我注意到 njs-040 错误连接超时。由于两者都运行在同一个环境中,所以连接性不会成为问题。我正在寻求您的帮助或意见以了解连接池耗尽的原因?正如我所看到的,DB 上的连接/会话数量配置的数量较少。 当我重新启动 pod/进程时,一切都会恢复正常。在我的流程中遇到的一些问题,如果您可以指导并提供宝贵的意见,我正在寻求您的帮助。
- 如果使用连接池(oracle 连接器),它也应该释放对象,耗尽的机会会减少吗?
- 在进程/pod 启动并通过连接器 (oracle) 获取数据源中的连接对象后,发生网络问题并且进程和数据库之间的连接丢失,连接器是否恢复?根据我的观察,我在其他进程中注意到的似乎应该被恢复,当它与范围一起运行时,在一个进程中可能会导致什么?
我非常感谢您的回复。 提前致谢 桑吉夫
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
OCCI 上载空间数据
众所周知,数据是 GIS 的血液,一个 GIS 系统最重要的是数据,而且在整个系统的建设过程中的花费也比较大。为此,许多 GIS 厂商和数据库厂商逐渐推出空间数据的存储解决方案。
其中 Oracle Spatial 是目前最大的数据库厂商 Oracle 公司推出的新一代空间数据库,它采用对象关系型数据存储模式来存储空间数据。
空间数据在 Oracle 中是以 SDO_GEOMETRY 数据类型来存储的,它的定义为:
SQL> desc sdo_geometry
名称 是否为空 ? 类型
----------------------------------------- -------- -------------------------
SDO_GTYPE NUMBER
SDO_SRID NUMBER
SDO_POINT MDSYS.SDO_POINT_TYPE
SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY
SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY
具体的字段解释在这里就不详细说明,可以参见 oracle 的官方文档或者有关书籍。
首先,用 oracle 类型转换工具(OTT)把 SDO_GEOMETRY 数据类型转换成高级语言源程序文件。
D:\>ott userid=scott/tiger intype=demoin.tpy outtype=demoout.tpy code=cpp hfile=
sdogeometry.h cppfile=sdogeometry.cpp mapfile=mappings.cpp attraccess=private
转换后生成了四个 C++ 源文件和头文件。
下面的代码是插入一个矩形。
- #include <iostream>
- #include <occi.h>
- #include <assert.h>
- #include "mappings.h"
- #include "sdogeometry.h"
- using namespace oracle::occi;
- using namespace std;
- const int SDO_GTYPE = 2003;
- int main ()
- {
- Environment *env = NULL;
- Connection *conn = NULL;
- Statement *stmt = NULL;
- ResultSet *rs = NULL;
- string username = "scott"; // 用户名
- string password = "tiger"; // 密码
- string connstring = "//localhost:1521/ORCL"; // 连接字符串
- string sql,strname;
- int errNum = 0;
- string errMsg = "";
- env = Environment::createEnvironment(Environment::OBJECT); // 创建一个环境变量
- mappings(env); // 注册函数
- try
- {
- assert(env != NULL);
- conn = env->createConnection(username,password,connstring); // 创建一个数据库连接对象
- stmt = conn->createStatement(); // 创建一个 Statement 对象
- }
- catch (SQLException ex)
- {
- errNum = ex.getErrorCode();
- errMsg = ex.getMessage();
- cout << "Error Number : "<< errNum << endl; // 取出异常代码
- cout << "Error Message :" <<errMsg << endl; // 取出异常信息
- }
- // 数据处理部分
- sql = "Insert Into spatial(geoloc) VALUES (:1)";
- try
- {
- Number srid_null; //SRID
- srid_null.setNull();
- sdo_point_type *point_type = new sdo_point_type(); //SDO_POINT_TYPE
- point_type->setNull();
- vector<Number> sdo_elem_info,sdo_ordinates; // 元素信息和坐标数据
- sdo_elem_info.clear();
- sdo_ordinates.clear();
- sdo_elem_info.push_back(1);
- sdo_elem_info.push_back(1003);
- sdo_elem_info.push_back(3);
- sdo_ordinates.push_back(1);
- sdo_ordinates.push_back(1);
- sdo_ordinates.push_back(5);
- sdo_ordinates.push_back(7);
- SDO_GEOMETRY *sdo_geometry = new SDO_GEOMETRY();
- sdo_geometry->setsdo_gtype(SDO_GTYPE);
- sdo_geometry->setsdo_srid(srid_null);
- sdo_geometry->setsdo_point(point_type);
- sdo_geometry->setsdo_elem_info(sdo_elem_info);
- sdo_geometry->setsdo_ordinates(sdo_ordinates);
- stmt->setSQL(sql);
- stmt->setObject(1,sdo_geometry); // 设置对象
- stmt->executeUpdate(); // 执行更新操作
- delete sdo_geometry;
- }
- catch (SQLException ex)
- {
- errNum = ex.getErrorCode();
- errMsg = ex.getMessage();
- cout << "Error Number : "<< errNum << endl; // 取出异常代码
- cout << "Error Message :" <<errMsg << endl; // 取出异常信息
- }
- conn->terminateStatement(stmt); // 终止 Statement 对象
- env->terminateConnection(conn); // 断开数据库连接
- Environment::terminateEnvironment(env); // 终止环境变量
- return 1;
- }
插入后,查询的结果如下:
SQL> select * from spatial;
GEOLOC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY(1, 1, 5, 7))
这只是对示例数据进行上载,还需要对实际的地理空间数据进行测试,比如 shapefile 文件的上载。
读取和一般的关系型数据读取一样,只不过看成是一个对象就可以了。
- // 以下代码是读取数据代码
- string sqlQuery = "SELECT * FROM spatial";
- stmt->setSQL(sqlQuery);
- rs = stmt->executeQuery(sqlQuery);
- while (rs->next())
- {
- SDO_GEOMETRY* geometry = (SDO_GEOMETRY*)rs->getObject(1);
- cout<<"SDO_GTYPE: "<<unsigned int(geometry->getsdo_gtype())<<endl;
- //cout<<"SRID: "<<unsigned int(geometry->getsdo_srid())<<endl;
- }
原文链接: http://blog.csdn.net/zhouxuguang236/article/details/7619661
今天关于c++ 调用 occi 访问 oracle和c++ 调用ocx的分享就到这里,希望大家有所收获,若想了解更多关于C++ OCCI API数据库操作之连接、返回查询结果集为json格式、For oracle databases, if the top showing the oracle database, then oracle process is using the top c、NodeJS-Oracle DB - NJS-040 连接超时,在 ICP 中使用带有 Lopback 的 oracle 驱动程序(loopback-connector-oracle)、OCCI 上载空间数据等相关知识,可以在本站进行查询。
本文标签: