- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 OCCI Oracle API 访问数据库的 OracleConnection 类。我现在需要从数据库中获取多行记录,这是通过 API 的 ResultSet::getDataBuffer(...) 函数完成的。该函数接受一系列参数,其中一个参数是一个大枚举,它定义了可以包含的数据类型。
显然,我不想让我的应用程序代码中充斥着 Oracle API 类型,因此其他 API 可以与这个 API 互换。所以我的问题是如何最好地在我的函数包装器中使用这个 Type 参数?我应该只创建一个枚举并只采用我需要的类型,还是模板可以帮助我映射到我拥有的 OracleConnection 类中的 OCCI 枚举?
Occi setDataBuffer功能:
void setDataBuffer(
unsigned int colIndex,
void *buffer,
Type type,
sb4 size = 0,
ub2 *length = NULL,
sb2 *ind = NULL,
ub2 *rc = NULL);
Type
这是一个如下所示的枚举:
enum Type
{
OCCI_SQLT_CHR=SQLT_CHR,
OCCI_SQLT_NUM=SQLT_NUM,
OCCIINT = SQLT_INT,
OCCIFLOAT = SQLT_FLT,
OCCIBFLOAT = SQLT_BFLOAT,
OCCIBDOUBLE = SQLT_BDOUBLE,
OCCIIBFLOAT = SQLT_IBFLOAT,
OCCIIBDOUBLE = SQLT_IBDOUBLE,
OCCI_SQLT_STR=SQLT_STR,
OCCI_SQLT_VNU=SQLT_VNU,
OCCI_SQLT_PDN=SQLT_PDN,
OCCI_SQLT_LNG=SQLT_LNG,
OCCI_SQLT_VCS=SQLT_VCS,
.... (about 2x as many to go)
我的包装器如下所示:
void setDataBuffer(unsigned int colIndex, void * buffer, unsigned long size = 0, int type /*use int or template or redefine own Type Enum?*/, unsigned short * length = NULL, signed short * ind = NULL, unsigned short * rc = NULL)
最佳答案
一个选择是让您的函数成为模板,然后使用特征类将模板类型转换为表示各种 Oracle 类型的值。
traits 类可能如下所示:
template <typename T>
struct oracle_type_traits;
template <> // create a specialization for each relevant type
struct oracle_type_traits<double> {
static const value = OCCIBDOUBLE // its value member should be the value you want to map to
};
现在,下面将为您提供 double
的 Oracle 类型 ID :
oracle_type_traits<double>::value
内部 setDataBuffer<T>(...)
,你只要检查oracle_type_traits<T>::value
获取相应的 Oracle 类型 ID。
关于c++ - 关于 setDataBuffer (OCCI) 包装器的实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551330/
我正在使用 OCCI 和 C++ 从 Oracle 获取数据。该代码运行良好,但我注意到性能有所下降。发生这种情况是因为在 rset->next() 迭代中一些计算需要时间。这种延迟的影响是oracl
我是 Oracle 的新手。我正在尝试使用 OCCI 连接到远程 Oracle 数据库。到目前为止,我发现的所有示例都是用于连接到本地数据库的。有人可以给我指出正确的方向,让我知道在哪里可以找到示例连
在从查询结果集中请求数据时,是否可以使用 oracle OCCI 而不是为列提供索引,而实际传递列名并获取数据? 所以不要这样做:(伪代码) std::string query = "SELECT N
我正在编写一个多线程应用程序,其中有一个主线程将任务分配给工作线程。根据任务,工作线程使用全局 occi 环境 创建连接。当工作线程完成其任务时,它会关闭连接(我敢肯定,终止时不会抛出异常)。 我的问
我正在编写一个多线程应用程序。我的工作线程从环境对象获取连接,如下所示: //EnterCriticalSection(&cs); conn = env->createConnection(usern
我正在探索一款使用 Oracle API 的软件,据我所知,对象方法通常期望将“OCCI 上下文”或“OCCI 环境”值作为参数。 一个例子是 Account 对象的构造函数: Account( or
在下面的 C++ 代码中,我正在根据搜索值更新 emp 表的一个字段。但是这段代码不能正常工作。我得到中止的输出。 void UpdateData(string field_name,string u
如果是 Oracle::OCCI::Connection,我需要测试连接性,如何获取和设置连接超时值?我阅读了 Oracle OCCI 的文档,但找不到所需的函数。 提前致谢。 最佳答案 这个答案指的
通过 OCCI 发送一个简单的查询后(例如:select * from ALL_USERS)我需要知道该列的数据类型,目前我一直在使用 ResultSet::getColumnListMetaData
我有一个使用 OCCI Oracle API 访问数据库的 OracleConnection 类。我现在需要从数据库中获取多行记录,这是通过 API 的 ResultSet::getDataBuffe
尝试通过将包含 char 缓冲区的结构存储到 vector 中来最小化 OCCI 数组提取的行数,代码如下: struct Columns { char buffer[1000][300];
帮帮我,我想创建一个通用函数来获取任何查询字符串的结果并将所有行放入另一个变量中。迭代一行时,如何知道可用的列数? Environment *env = Environment::createEnvi
编辑: 已经发生了足够多的变化,我提出了一个新问题。 You can find it here . 我正在尝试使用 OCCI 通过 C++ 连接到 Oracle 12c。我将 CLion2016.1
我正在开发一个以 Oracle 作为数据库的 C++ 应用程序,并尝试获取数以千计的 CLOB 数据类型的记录。 一直在网上搜索如何在 OCCI 中预取 CLOB 数据类型,但总是看到“如果 LONG
我使用以下简单代码连接到数据库,但收到 ORA-24399 错误,表示指定的连接数无效。我已经用谷歌搜索了足够多但不知道。这是一个CPP 程序。 以下是代码片段: try { Envi
我正在尝试在 C++ 中使用 Oracle 和 OCCI 开发一些应用程序。我成功安装了“oracle linux”和 oracle db 12c。我假设 OCCI 包含 db 作为它的一部分,所以我
我有一个在数据库上执行的查询,该查询返回一个记录数组,我在 Oracle OCCI 文档中读到您必须使用 ResultSet::setDataBuffer()函数从数据库中获取数组的数据。 当数据库行
这是我第一次体验 OCCI,所以如果答案很明显,请原谅。 我有一个 Statement 对象,以通常的方式创建: string sqlStatement = "INSERT INTO data_tab
是否可以在 Microsoft Visual Studio 2015 社区中使用 OCCI(Oracle c++ 调用接口(interface))?如果可以,如何使用? 在 Oracle 下载部分我只
如何获得查询执行的结果 - select count (*) from myTable?代码是: ... oc::Statement* stmt = m_cConnection->create
我是一名优秀的程序员,十分优秀!