`

OTL bigint(int64)的处理

otl 
阅读更多
1.OTL_STL
这个宏的作用是声明后可以使用string类型。开始时不知道,存取VARCHAR2字段时都是用char[],总是得算计着字符串的长度,很麻烦(吐槽一下,官方的例子也总是用char[],为什么不用string呢,不解),用了这个宏之后,otl_stream对象输入,输出VARCHAR2字段时可以直接读写string变量,很方便。
2.OTL_BIGINT      这个宏的作用是声明后可以使用64位的整型和数据库交互。因为Oracle的NUMBER最多能有38位,所以有时候NUMBER字段中的数字放不到一个int里,这时候须要用到__int64,但是__int64并不是基类型,OTL提供的绑定变量类型声明中没有int64,但是有一个bigint,这时候就需要OTL_BIGINT这个宏来实现他们之间的转化。
#define OTL_BIGINT int64
这样声明后,就可以用bigint作为绑定变量的类型说明符了,比较特殊的是,bigint字段在select时也要注明,类似这样:"select c1 :#1<bigint>, c2 from t1",特别说明,c1必须放在第一列,否则会出错
我自己在工程中这样使用:
Makefile.setting:
USE_OTL_BIGINT=1 //是否启动otl_bigint的开关
Makefile推导模板 Makefile.base:
ifeq "$(USE_OTL_BIGINT)" "1"
        DEFS += USE_OTL_BIGINT
endif
包含otlv4.h头文件的otl.h:
#include "otlv4.h" 之前增加宏定义
#ifdef USE_OTL_BIGINT
#define OTL_BIGINT int64
/*This #define enables the mapping from <bigint> for 64-bit OCIs for LP64 platforms to signed 64-bit longs.
It's a more efficient alternative to the char[XXX] binding and bigint-string / string-bigint conversion
(see also the following #define's: OTL_BIGINT,  OTL_BIGINT_TO_STR,   OTL_STR_TO_BIGINT).*/
//将int64隐射到long上,这样的好处是不需要再定义OTL_BIGINT_TO_STR和OTL_STR_TO_BIGINT来进行转换。
#define OTL_ORA_MAP_BIGINT_TO_LONG
#endif
 
#define OTL_DESTRUCTORS_DO_NOT_THROW
#define OTL_STL
 
cpp中使用otl时可兼容是否开启otl_bigint:
char szSql[1024]="";
#ifdef USE_OTL_BIGINT 
char szBigint[32]="bigint";
char szHint[32]=":#1<bigint>";
#else
char szBigint[32]="double";
char szHint[32]="";
#endif
 aistring strSchemeZd = "ZD";
snprintf(szSql, sizeof(szSql), "select nvl(a.acct_id, -1) %s, nvl(a.region_code, -1)"
" from %s.SYS_RT_ACCOUNT a where a.acct_id = :val0<%s>"
" and a.valid_date <= :val1<int> and (a.expire_date > :val2<int> or a.expire_date is null)"
, szHint, strSchemeZd.c_str(), szBigint);
 
otl_stream 析入析出时:
int32 queryXXXXXX(
const int16 nSqlType,
const char* szSql, 
const int64 iQueryParam, 
const char* szQueryParam, 
const int32 nszParamType)
{
#ifdef USE_OTL_BIGINT 
int64 iTmpBigint = 0;
#else
double iTmpBigint = 0;
#endif
 
otl_stream stream(50, szSql, *pConn);
iTmpBigint = iQueryParam;
if (iQueryParam > -1) 
{
iTmpBigint = iQueryParam;
stream<<iTmpBigint;
}
if (NULL != szQueryParam) 
{
stream<<szQueryParam;
stream<<nszParamType;
}
 
if(stream.eof())//未查询到
{;
}
stream >> iTmpBigint;
XXX.set_acctId(static_cast<int64>(iTmpBigint));
 
 
 
 
分享到:
评论

相关推荐

    OTL编程简介 c++

    otl_stream 类是 OTL 编程简介的流处理类,提供了流式数据处理功能。主要成员函数有: * otl_stream(const short arr_size, const char* sqlstm, otl_connect& db, const char* ref_cur_placeholder=0); * void ...

    OTL.rar_oracle_oracle O_oracle OTL_otl oracle_otlv4_h.zip

    6. **异常处理**:OTL提供了一套完善的异常处理机制,当数据库操作出现错误时,会抛出对应的异常,便于开发者捕获并处理错误。 7. **性能优化**:OTL的作者在设计时充分考虑了性能,例如使用预编译语句、批量插入等...

    OTL初级教程 C++访问ORACLE

    OTL(Oracle Template Library)是C++开发人员用于访问Oracle数据库的一个强大库,它提供了高效、灵活且易于使用的API,让开发者能够以面向对象的方式处理SQL语句和数据操作。本教程将深入介绍OTL的基本概念、核心...

    C++OTL使用说明

    C++ OTL(Open Transaction Library)是一个强大的工具,用于在C++编程中处理ODBC(Open Database Connectivity)数据库。它为开发者提供了简单、高效的接口,使得与各种数据库(如SQL Server、Oracle、MySQL等)...

    OTL使用指南

    3. 处理结果集:使用 OTL 提供的处理方法,处理结果集。 OTL 流的概念 OTL 流是 OTL 的一个核心概念,指的是 OTL 对数据库的访问流程。OTL 流包括了连接数据库、执行 SQL 语句、处理结果集三个步骤。OTL 流可以...

    OTL编程技术详解

    5. **异常处理**:OTL使用C++异常处理机制来捕获和处理数据库操作中可能出现的错误,使得代码更加健壮和易于维护。 6. **批量操作**:OTL支持批处理,即一次性发送多条SQL语句到数据库执行,这在大数据量操作时能...

    OTL的全部吐血文档

    2. **错误处理**:详细阐述如何捕获和处理OTL产生的异常,以及如何调试和解决常见问题。 3. **案例分析**:提供一些实际应用场景的例子,如复杂的查询、多线程访问数据库等,帮助读者理解OTL在真实项目中的运用。 ...

    OTL实战小结源码

    7. **异常处理**:OTL使用C++异常处理机制来捕获数据库操作可能出现的错误。例如,`try { ... database operation ... } catch (otl_exception p) { cerr () ; cerr () ; cerr () ; }` 通过这个源码示例,你可以...

    otl官方示例代码

    可能会展示如何利用OTL在Oracle 9环境中进行更高级的操作,如存储过程调用、游标操作或者处理BLOB和CLOB等大型对象。 4. ex391_odbc.cpp、ex120_odbc.cpp、ex684_odbc.cpp、ex393_odbc.cpp、ex411_odbc.cpp:这些是...

    OTL 宏的介绍

    6. **OTL_ODBC_MSSQL_2005**:专为Microsoft SQL Server 2005设计,因为此版本引入了VARCHAR(MAX)、VARBINARY(MAX)和NVARCHAR(MAX)等新数据类型,处理方式与旧的TEXT、NTEXT和IMAGE类型不同。如果不需要使用这些MAX...

    C++ OTL 连接数据库 资料 以及源文件

    OTL(Object Transaction Library)是C++中一个用于数据库访问的开源库,它提供了一种高效、简洁的方式来处理SQL操作。这个压缩包“C++ OTL 连接数据库 资料 以及源文件”包含了关于如何使用OTL库来连接和操作数据库...

    otl数据库.pdf

    - **异常处理**:OTL库通过异常处理机制来报告操作中的错误。 - **兼容性**:OTL库可以与多种数据库系统一起工作,包括Oracle和Microsoft SQL Server等。 - **线程安全**:OTL库支持线程安全操作。 ### OTL库组件...

    otl安装及配置

    OTL提供了一种高效的、面向对象的方式来执行SQL语句,处理结果集,以及进行事务管理。它使得在C++应用程序中进行数据库编程变得更加便捷。 在“otl安装及配置”的过程中,主要涉及以下几个步骤: 1. **环境准备**...

    otl.zip_OTL_oracle_oracle OTL_sql server_数据库 otl

    OTL为开发者提供了一种简洁的接口,使得在C++应用中处理数据库任务变得更为便捷。此外,OTL还支持其他常见的数据库系统,如SQL Server和Sybase。 在“otl.zip”这个压缩包中,包含的主要文件是“otl”,这可能是指...

    c++ otl 源码

    OTL提供了一种高效、线程安全的方式来进行事务处理、错误处理和数据流操作。在本篇文章中,我们将深入探讨OTL库的核心概念、主要功能以及如何使用其源码。 **OTL核心概念** 1. **数据流(Data Streams)**:OTL...

    C++使用OTL连接数据库.doc

    OTL提供了丰富的功能,包括事务管理、错误处理、批量操作和存储过程调用等。通过OTL,C++开发者能够以面向对象的方式编写高效、可读性强的数据库访问代码,而不必关心底层的数据库API细节。这使得OTL成为C++开发...

    c++ otl 源码 例子

    OTL的核心在于它的流接口,这使得数据库操作就像处理文件或网络流一样简单。 2. ODBC与OTL: ODBC(Open Database Connectivity)是一种数据库访问标准,允许应用程序通过ODBC驱动程序连接到多种数据库。OTL利用...

    OTL帮助程序OTLHelper 简易封装

    5. **异常处理**:OTLHelper可以捕获和处理OTL库抛出的异常,提供统一的错误处理机制,使代码更易于维护。 6. **性能优化**:OTL库本身就具有高性能特性,如缓冲区管理,自动批处理等。OTLHelper可能进一步优化这些...

Global site tag (gtag.js) - Google Analytics