⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 otlv4.h

📁 一个跨平台的数据库操作库文件,可以轻松在linux和windows下进行数据库读写以及其他的操作,支持多种数据库,代码包含很多example,初学者很容易上手. OTL 是 Oracle, Odbc
💻 H
📖 第 1 页 / 共 5 页
字号:
}#define OTL_NO_STM_TEXT "#No Stm Text available#"class otl_datetime{public:  int year;  int month;  int day;  int hour;  int minute;  int second;  unsigned long fraction;  int frac_precision;#if defined(OTL_ORA_TIMESTAMP)  short int tz_hour;  short int tz_minute;#endif otl_datetime() {  year=1900;  month=1;  day=1;  hour=0;  minute=0;  second=0;  fraction=0;  frac_precision=0;#if defined(OTL_ORA_TIMESTAMP)  tz_hour=0;  tz_minute=0;#endif } otl_datetime (const int ayear,  const int amonth,  const int aday,  const int ahour,  const int aminute,  const int asecond,  const unsigned long afraction=0,  const int afrac_precision=0#if defined(OTL_ORA_TIMESTAMP)  ,   const short int atz_hour=0,  const short int atz_minute=0#endif ) {  year=ayear;  month=amonth;  day=aday;  hour=ahour;  minute=aminute;  second=asecond;  fraction=afraction;  frac_precision=afrac_precision;#if defined(OTL_ORA_TIMESTAMP)  tz_hour=atz_hour;  tz_minute=atz_minute;#endif } otl_datetime(const otl_datetime& dt) {   copy(dt); } ~otl_datetime(){} otl_datetime& operator=(const otl_datetime& dt) {   copy(dt);  return *this; }protected:  void copy(const otl_datetime& dt)  {    year=dt.year;    month=dt.month;    day=dt.day;    hour=dt.hour;    minute=dt.minute;    second=dt.second;    fraction=dt.fraction;    frac_precision=dt.frac_precision;#if defined(OTL_ORA_TIMESTAMP)    tz_hour=dt.tz_hour;    tz_minute=dt.tz_minute;#endif  }};class otl_oracle_date{public: unsigned char century; unsigned char year; unsigned char month; unsigned char day; unsigned char hour; unsigned char minute; unsigned char second; otl_oracle_date(){} ~otl_oracle_date(){}};inline void convert_date(otl_datetime& t,const otl_oracle_date& s){ t.year=(OTL_SCAST(int, s.century-100)*100+(OTL_SCAST(int, s.year-100))); t.month=s.month; t.day=s.day; t.hour=s.hour-1; t.minute=s.minute-1; t.second=s.second-1;}inline void convert_date(otl_oracle_date& t,const otl_datetime& s){ t.year=OTL_SCAST(unsigned char, ((s.year%100)+100)); t.century=OTL_SCAST(unsigned char, ((s.year/100)+100)); t.month=OTL_SCAST(unsigned char, s.month); t.day=OTL_SCAST(unsigned char, s.day); t.hour=OTL_SCAST(unsigned char, (s.hour+1)); t.minute=OTL_SCAST(unsigned char, (s.minute+1)); t.second=OTL_SCAST(unsigned char, (s.second+1));}class otl_null{public:#if (defined(_MSC_VER)&&(_MSC_VER==1200)) int dummy; // this is to fix a compiler bug in VC++ 6.0#endif otl_null(){} ~otl_null(){}};class otl_column_desc{public:  char* name;  int  dbtype;  int  otl_var_dbtype;#if defined(_WIN64)  __int64 dbsize;#else  int  dbsize;#endif  int  scale;#if defined(_WIN64)  __int64 prec;#else  int  prec;#endif  int  nullok;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8)  int charset_form;  int char_size;#endif  otl_column_desc()  {    name=0;    name_len_=0;    dbtype=0;    otl_var_dbtype=0;    dbsize=0;    scale=0;    prec=0;    nullok=0;#if defined(OTL_ORA_UNICODE)    charset_form=0;    char_size=0;#endif  }  ~otl_column_desc()  {    delete[] name;  }  otl_column_desc& operator=(const otl_column_desc& desc)  {    if(name_len_>=desc.name_len_)      OTL_STRCPY_S(name,name_len_,desc.name);    else if(name==0 && desc.name!=0){      name=new char[desc.name_len_];      name_len_=desc.name_len_;      OTL_STRCPY_S(name,name_len_,desc.name);    }else if(name_len_<desc.name_len_ && desc.name!=0){      delete[] name;      name=new char[desc.name_len_];      name_len_=desc.name_len_;      OTL_STRCPY_S(name,name_len_,desc.name);    }    dbtype=desc.dbtype;    otl_var_dbtype=desc.otl_var_dbtype;    dbsize=desc.dbsize;    scale=desc.scale;    prec=desc.prec;    nullok=desc.nullok;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8)    charset_form=desc.charset_form;    char_size=desc.char_size;#endif    return *this;  }  void set_name(const char* aname,const int aname_len=0)  {    int len;    if(aname_len==0)      len=OTL_SCAST(int,strlen(aname))+1;    else      len=aname_len+1;    if(name_len_<len){      if(name)delete[] name;      name=new char[len];      name_len_=len;      for(int i=0;i<len-1;++i)        name[i]=aname[i];      name[len-1]=0;    }  }protected:  int name_len_;};class otl_var_desc{public:  int  param_type;  int  ftype;  int  elem_size;  int  array_size;  int  pos;  int  name_pos;  char name[128];  int  pl_tab_flag; otl_var_desc() {  param_type=0;  ftype=0;  elem_size=0;  array_size=0;  pos=0;  name_pos=0;  name[0]=0;  pl_tab_flag=0; } ~otl_var_desc(){} void copy_name(const char* nm) {  if(!nm)   name[0]=0;  else{#if defined(_MSC_VER)#if (_MSC_VER >= 1400)   OTL_STRNCPY_S(name,sizeof(name),nm,sizeof(name)-1);   name[sizeof(name)-1]=0;#else   strncpy(name,nm,sizeof(name));   name[sizeof(name)-1]=0;#endif#else   strncpy(name,nm,sizeof(name));   name[sizeof(name)-1]=0;#endif  } }};const int otl_var_none=0;const int otl_var_char=1;const int otl_var_double=2;const int otl_var_float=3;const int otl_var_int=4;const int otl_var_unsigned_int=5;const int otl_var_short=6;const int otl_var_long_int=7;const int otl_var_timestamp=8;const int otl_var_varchar_long=9;const int otl_var_raw_long=10;const int otl_var_clob=11;const int otl_var_blob=12;const int otl_var_refcur=13;const int otl_var_long_string=15;const int otl_var_db2time=16;const int otl_var_db2date=17;const int otl_var_tz_timestamp=18;const int otl_var_ltz_timestamp=19;const int otl_var_bigint=20;#if defined(OTL_ORA_UNICODE)||defined(OTL_ORA_UTF8)const int otl_var_nchar=21;const int otl_var_nclob=22;#else#endifconst int otl_var_raw=23;const int otl_var_lob_stream=100;const int otl_bigint_str_size=40;class otl_long_string{public:  unsigned char* v;  int length;  int extern_buffer_flag;  int buf_size;  bool this_is_last_piece_; otl_long_string(const int buffer_size=32760,const int input_length=0) {   this_is_last_piece_=false;   if(buffer_size==0){     v=0;     length=0;     extern_buffer_flag=0;   }else{     extern_buffer_flag=0;     length=input_length;     buf_size=buffer_size;     v=new unsigned char[buffer_size+1];     memset(v,0,buffer_size);   } } otl_long_string (const void* external_buffer,  const int buffer_size,  const int input_length=0) {   this_is_last_piece_=false;   extern_buffer_flag=1;   length=input_length;   buf_size=buffer_size;   v=OTL_RCAST(unsigned char*, OTL_CCAST(void*, external_buffer)); }  otl_long_string& operator=(const otl_long_string& s)  {    this_is_last_piece_=s.this_is_last_piece_;    if(s.extern_buffer_flag){      if(!extern_buffer_flag)        delete[] v;      v=s.v;      length=s.length;      extern_buffer_flag=s.extern_buffer_flag;      buf_size=s.buf_size;    }else{      if(extern_buffer_flag){        v=new unsigned char[s.buf_size];        buf_size=s.buf_size;      }else if(buf_size<s.buf_size){        delete[] v;        v=new unsigned char[s.buf_size];        buf_size=s.buf_size;      }      length=s.length;      extern_buffer_flag=s.extern_buffer_flag;      memcpy(v,s.v,length);      if(length<buf_size&&s.v[length]==0)        v[length]=0;    }    return *this;  }  otl_long_string(const otl_long_string& s)  {    this_is_last_piece_=s.this_is_last_piece_;    length=s.length;    extern_buffer_flag=s.extern_buffer_flag;    buf_size=s.buf_size;    if(s.extern_buffer_flag)      v=s.v;    else{      v=new unsigned char[buf_size];      memcpy(v,s.v,length);      if(length<buf_size&&s.v[length]==0)        v[length]=0;    }  }    virtual ~otl_long_string()  {   if(!extern_buffer_flag)delete[] v;  }  void set_len(const int alen=0){length=alen;}  int len(void)const {return length;}  void set_last_piece(const bool this_is_last_piece=false)  {    this_is_last_piece_=this_is_last_piece;  }  unsigned char& operator[](int ndx){return v[ndx];}  virtual void null_terminate_string(const int alen)  {    (*this)[alen]=0;  }};#if defined(OTL_UNICODE)class otl_long_unicode_string: public otl_long_string{public:  otl_long_unicode_string(const int buffer_size=32760,const int input_length=0)    : otl_long_string(0,0)  {    extern_buffer_flag=0;    length=input_length;    buf_size=buffer_size;    v=new unsigned char[(buffer_size+1)*sizeof(OTL_WCHAR)];    memset(v,0,buffer_size*sizeof(OTL_WCHAR));  }    otl_long_unicode_string  (const void* external_buffer,    const int buffer_size,   const int input_length=0)    : otl_long_string(external_buffer,buffer_size,input_length)  {    extern_buffer_flag=1;    length=input_length;    buf_size=buffer_size;    v=OTL_RCAST(unsigned char*, OTL_CCAST(void*, external_buffer));  }  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -