📄 cursor.h
字号:
#ifndef __CURSOR_H_
#define __CURSOR_H_
#include <iostream>
#include <string>
#include <map>
#include "ocicpp.h"
#include "OraError.h"
#include "OraType.h"
#include "OraString.h"
#include "OraNumber.h"
#include "OraDummy.h"
#include "OraLob.h"
#include "OraBFile.h"
#include "OraDate.h"
#include "OraRaw.h"
#include "OraLabel.h"
#include "OraRowID.h"
#include "OraRefCur.h"
#include "Lob.h"
#include "BFile.h"
#include "RowID.h"
#define TEST_EXPLICIT_PREFETCH 1000
#pragma warning (disable: 4786) // id truncated to '255' chars in the browser info
#pragma warning (disable: 4290) // C++ exception specification ignored
#pragma warning (disable: 4710) // function 'xxx' not inlined
#pragma warning (disable: 4800) // performance warning
// const std::string default_null_text="<NULL>";
#define default_null_text "<NULL>"
namespace OCICPP {
using std::map;
using std::string;
class Cursor {
private: /* OCI Defined handles */
OCIEnv *envhp;
OCISvcCtx *svchp;
OCIStmt *stmthp;
OCIParam *paramd;
OCIError *errhp;
map<string,OCIBind *> binds; /* map of bindings */
private:
/* All information is in row now */
OraType **row; /* Contains fetched row.Array of pointers to OraTypes derivative */
sb4 nCols;
ub2 stmtType; /* Statement type as described in table 4-1 OCI Reference */
sword status;
string nulltext; /* Text for null fields */
unsigned fetched; /* 0..prefetchRows */
unsigned prefetchRows; /* 1.. */
unsigned curRow; /* 0..fetched */
unsigned fetched_all; /* rows fetched from the start */
int haveResultSet;
int canFetch;
int Initialized;
OCICPP::CursorType cursorType; /* REFCURSOR or NTABLE */
map<string,int> cols_map; /* For get<Type>("colName") methods */
public:
Cursor();
Cursor(OCIEnv *,OCISvcCtx *,OCIError *er,int prefetch,OCICPP::CursorType Type=DEFAULT);
void init(OCIEnv *,OCISvcCtx *,OCIError *er,int prefetch,OCICPP::CursorType Type=DEFAULT);
~Cursor();
void drop();
void setPrefetch(unsigned nRows);
/* Once for request*/
int prepare(const string &);
void exec();
unsigned int execEx();
void describe();
void define();
void hashHead();
void execute(int prefetch=1); /* User's should use this func in most cases
or they can do exec(),describe(),define()
by hand
*/
void bind(const string &par,char *buf,int buflen,short *isNull=0);
void bind(const string &par,const string &val,short *isNull=0);
void bind(const string &par,int &val,short *isNull=0);
void bind(const string &par,double &val,short *isNull=0);
void bind(const string &par,RowID &val,short *isNull=0);
void bind(const string &par,Cursor &val,short *isNull=0);
void bind(const string &par,Lob &val,short *isNull=0);
/* fetch returns non zero value if theres another rows */
bool fetch();
/* get<Type> methods working with hardcoded cols numbers */
void getStr(int col,string &,bool *isNull=0) const;
void getInt(int col,int &val,bool *isNull=0,const int *null_value=0) const;
void getDouble(int col,double &val,bool *isNull=0,const double *null_value=0) const;
void getStrMon(int col,string &val) const;
void getSec(int col,int &val) const;
void getMin(int col,int &val) const;
void getHour(int col,int &val) const;
void getDay(int col,int &val) const;
void getMonth(int col,int &val) const;
void getYear(int col,int &val) const;
void getCLOB(int col,Lob &) const;
void getBLOB(int col,Lob &) const;
void getFILE(int col,BFile &) const;
void getRowID(int col,RowID &) const;
void getCursor(int col,Cursor &) const;
inline string getStr(int col,bool *isNull=0) const;
inline int getInt(int col,bool *isNull=0,const int *null_value=0) const;
inline double getDouble(int col,bool *isNull=0,const double *null_value=0) const;
/* get<Type> same but working with attribute name */
void getStr(const string &col,string &val,bool *isNull=0) const;
void getInt(const string &col,int &val,bool *isNull=0,const int *null_value=0) const;
void getDouble(const string &col,double &val,bool *isNull=0,const double *null_value=0) const;
void getStrMon(const string &,string &) const;
void getSec(const string &,int &) const;
void getMin(const string &,int &) const;
void getHour(const string &,int &) const;
void getDay(const string &,int &) const;
void getMonth(const string &,int &) const;
inline int getDay(int col) const;
inline int getMonth(int col) const;
inline int getYear(int col) const;
inline int getHour(int col) const;
inline int getSec(int col) const;
inline int getMin(int col) const;
inline int getDay(const string &col) const;
inline int getMonth(const string &col) const;
inline int getYear(const string &col) const;
inline int getHour(const string &col) const;
inline int getSec(const string &col) const;
inline int getMin(const string &col) const;
void getYear(const string &,int &) const;
void getCLOB(const string &col,Lob &lob) const;
void getBLOB(const string &col,Lob &lob) const;
void getFILE(const string &col,BFile &bfile) const;
void getRowID(const string &col,RowID &rid) const;
void getCursor(const string &col,Cursor &cur) const;
inline string getStr(const string &col,bool *isNull=0) const;
inline int getInt(const string &col,bool *isNull=0, const int *null_value=0) const;
inline double getDouble(const string &col,bool *isNull=0, const double *null_value=0) const;
/* Some functions to describe select-list */
int getNCols() const;
void getColName(int col,string &) const;
int getColSize(int col) const;
int getColSize(const string &) const;
int getColType(int col) const;
int getColType(const string &) const;
void getColTypeName(int col,string &) const;
void getColTypeName(const string &,string &) const;
bool isNull(int col) const;
bool isNull(const string &) const;
/* Some supplementary functions */
void setNullText(const string &);
private:
void newCellByType(OraType **,OCIStmt *,int col);
};
} // namespace OCICPP
#define GET_STR \
std::string s; \
getStr(col, s, isNull); \
return (s);
inline std::string OCICPP::Cursor::getStr(int col,bool *isNull) const
{
GET_STR;
}
inline std::string OCICPP::Cursor::getStr(const std::string &col,bool *isNull) const
{
GET_STR;
}
#undef GET_STR
#define GET_INT \
int n; \
getInt(col, n, isNull, null_value); \
return (n);
inline int OCICPP::Cursor::getInt(int col,bool *isNull, const int *null_value) const
{
GET_INT;
}
inline int OCICPP::Cursor::getInt(const std::string &col,bool *isNull, const int *null_value) const
{
GET_INT;
}
#undef GET_INT
#define GET_DOUBLE \
double d; \
getDouble(col, d, isNull, null_value); \
return (d);
inline double OCICPP::Cursor::getDouble(int col,bool *isNull, const double *null_value) const
{
GET_DOUBLE;
}
inline double OCICPP::Cursor::getDouble(const std::string &col,bool *isNull, const double *null_value) const
{
GET_DOUBLE;
}
#undef GET_DOUBLE
#define GET_DAY \
int d; \
getDay(col, d); \
return (d);
inline int OCICPP::Cursor::getDay(int col) const
{
GET_DAY;
}
inline int OCICPP::Cursor::getDay(const string &col) const
{
GET_DAY;
}
#define GET_MONTH \
int d; \
getMonth(col, d); \
return (d);
inline int OCICPP::Cursor::getMonth(int col) const
{
GET_MONTH;
}
inline int OCICPP::Cursor::getMonth(const string &col) const
{
GET_MONTH;
}
#define GET_YEAR \
int d; \
getYear(col, d); \
return (d);
inline int OCICPP::Cursor::getYear(int col) const
{
GET_YEAR;
}
inline int OCICPP::Cursor::getYear(const string &col) const
{
GET_YEAR;
}
#define GET_HOUR \
int d; \
getHour(col, d); \
return (d);
inline int OCICPP::Cursor::getHour(int col) const
{
GET_HOUR;
}
inline int OCICPP::Cursor::getHour(const string &col) const
{
GET_HOUR;
}
#define GET_SEC \
int d; \
getSec(col, d); \
return (d);
inline int OCICPP::Cursor::getSec(int col) const
{
GET_SEC;
}
inline int OCICPP::Cursor::getSec(const string &col) const
{
GET_SEC;
}
#define GET_MIN \
int d; \
getMin(col, d); \
return (d);
inline int OCICPP::Cursor::getMin(int col) const
{
GET_MIN;
}
inline int OCICPP::Cursor::getMin(const string &col) const
{
GET_MIN;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -