C++ OTL MySQL(Windows/Linux) 最后更新时间:2018-01-06 otlv4.h Version 4.0.420
2014-11-19 15:19
453 查看
有需要的联系 QQ 3508551694 请尊重劳动者的成果,本资源付费使用。
1 增加了对Windows MFC程序的支持
2 支持VS2010-VS2015
Windows每秒钟10000条以上插入;Linux每秒插入300条以上。Q269752451
Windows输出:
MFC程序输出:
Linux下:直接make,运行(填写一下用户名、密码、ODBC数据源名称即可)
Windows MySQL 可以设置大于10000
Linux MySQL 暂时设置成1.
1 增加了对Windows MFC程序的支持
2 支持VS2010-VS2015
Windows每秒钟10000条以上插入;Linux每秒插入300条以上。Q269752451
输出截图:
Linux输出:Windows输出:
MFC程序输出:
测试代码
main.cppint main(int, char *[]) { vector<e_eledata> arr_data; print("begin make_data"); make_data(arr_data); print("begin insert 3000 data"); try { Otlv4_Handle otl_handler; otl_handler.logon("root/123456@mysql_from_centos"); otl_handler.insert(e_eledata::insert_sql(),arr_data); print("insert data end "); arr_data.clear(); otl_handler.select(e_eledata::select_sql(),arr_data); print("select top 10:"); for (int i=0;i<arr_data.size();++i) { cout<<arr_data[i].to_string()<<endl; } } catch(otl_exception& ex) { cout<<"exception:\n" <<"msg:"<<ex.msg<<"\n" <<"text:"<<ex.stm_text<<"\n" <<"info:"<<ex.var_info<<"\n"; } return 0; };
使用:
Windows下:直接打开工程编译运行(填写一下用户名、密码、ODBC数据源名称即可)Linux下:直接make,运行(填写一下用户名、密码、ODBC数据源名称即可)
版本2.0简单封装OTL
头文件Otlv4_Handle.h
#ifndef OTLV4_HANDLE_H #define OTLV4_HANDLE_H // ================================================================================= // ORACLE, ODBC and DB2/CLI Template Library, Version 4.0.262, // Copyright (C) 1996-2012, Sergei Kuchin (skuchin@gmail.com) // modified by carea @ 2014-10-29 Version 1.0 // ================================================================================= /************************************************************************/ /* */ /* 邦定变量类型 | C++ 程序使用的对应类型 */ /* USED IN MySQL table | USED IN C++ STRUCT MEMBER TYPE */ /* int | long long */ /* timestamp | otl_datetime */ /* varchar | std::string */ /* bigint | long long */ /* decimal | double */ /* */ /************************************************************************/ //数据类型应该支持的输入输出操作 //otl_stream& operator>>(otl_stream& in ,T& t) //otl_stream& operator<<(otl_stream& out ,const T& t) /*********************************************************************************/ /* */ /* 常用SQL语句写法 */ /*otl_handle.select("select f2 from test_tab",arr); */ /*otl_handle.insert("insert into test_tab1(f2)values(:f2<char[30]> )",arr); */ /* */ /*说明:数据库表中如果有属性名为:IP、PORT、INTERVAL这种字段,赶紧改名!!(与关键字冲突) */ /* */ /*********************************************************************************/ #ifdef OTLV4_HANDLE_WINDOWS #define OTL_ODBC_MSSQL_2008 #define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE #define OTL_STL//using std::string #define OTL_ANSI_CPP // Turn on ANSI C++ typecasts #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) { n=_atoi64(str); } #define OTL_BIGINT_TO_STR(n,str) { _i64toa(n,str,10); } #define INSERT_NUM 10000 #endif #ifdef OTLV4_HANDLE_LINUX #define OTL_ODBC_UNIX #define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE //#define OTL_ODBC_MYSQL #define OTL_STL//using std::string #define OTL_ANSI_CPP // Turn on ANSI C++ typecasts #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) { n=atoll(str); } #define OTL_BIGINT_TO_STR(n,str) { sprintf(str,"%lld", n);} #define INSERT_NUM 1 #endif #include "otlv4.h"// include the OTL 4.0 header file #include <string> #include <algorithm> #include <vector> #include <iterator> using namespace std; #ifndef SCP_EXPORT_H #include "SCP_Export.h" #endif class SCP_Export Otlv4_Handle { public: Otlv4_Handle(); bool logon(const string& db_info); bool reconnect_to_db_once(void); ~Otlv4_Handle(void); template<typename T> int insert(const string& sql,const vector<T>& data); template<typename T> int select(const string& sql,vector<T>& data); int count_table_field(const string& table_name,const string& field_name); private: otl_connect db; // connect object string db_infor_; }; template<typename T> int Otlv4_Handle::insert(const string& sql,const vector<T>& data) { db.auto_commit_off(); otl_stream out; out.open(INSERT_NUM, //buffer size should be == 1 always on INSERT on Linux MySQL. //buffer size can be bigger than 2000 on Windows MySQL. sql.c_str(), db); // connectobject //submit for (size_t i = 0 ; i < data.size(); i++) { out<<data[i]; } out.flush(); db.commit(); return 0; } template<typename T> int Otlv4_Handle::select(const string& sql,vector<T>& data) { //使用邦定变量类型 //sql = "select* from "+talbe; db.auto_commit_off(); otl_stream in; in.open(100, //buffer size sql.c_str(),// SELECTstatement db // connectobject ); // copy all rows to be fetched into the vector copy(otl_input_iterator<T,ptrdiff_t>(in),otl_input_iterator<T,ptrdiff_t>(),back_inserter(data)); return 0; } #endif
存储数据类定义
存储数据类头文件e_eledata.h
#ifndef E_ELEDATA_H #define E_ELEDATA_H #include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std; #ifndef SCP_TYPE_H #include "scp_type.h" #endif #ifndef SCP_EXPORT_H #include "SCP_Export.h" #endif #ifndef OTLV4_HANDLE_H #include "Otlv4_Handle.h" #endif class SCP_Export e_eledata { public: friend SCP_Export otl_stream& operator<<(otl_stream& out , const e_eledata& eledata); friend SCP_Export otl_stream& operator>>(otl_stream& in , e_eledata& eledata); string to_string(void) const; e_eledata(); ~e_eledata(); e_eledata(const e_eledata& data); e_eledata& operator=(const e_eledata& data); int check_format(void); static string insert_sql(void); static string select_sql(void); public: id_type id;//64位机器这里不需要使用long,如果使用long则字节太长而打印不出来 id_type e_elemeterhead_id; otl_datetime dldt; double tae; //总有功电量。单位:kWh。 }; #endif
批量提交
因不同的数据库以及不同的操作系统,批量提交的buffer size有所不同,见官方示例代码:Windows MySQL 可以设置大于10000
Linux MySQL 暂时设置成1.
配置ODBC数据源
相关文章推荐
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- Windows/Linux C++ 获取时间间隔(单位:s , ms)
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- c++ 根据文件的最后修改时间判断是否需要覆盖更新文件
- RabbitMQ C++客户端 RabbitMQ Client for Windows/Linux 超简单接收发送接口-最近更新2018-02-28
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- linux 获取本地文件最后修改时间 c++
- Mysql update语句赋值嵌套select,更新和查询同一张表,必须取别名;用例:更新指定游戏服务器最后启动记录的结束时间
- C++ 获取当前时间毫秒数(兼容windows和linux)
- linux 到windows平台c++工程移植(持续更新)
- mysql获取数据库表最后更新时间,update_time 为null (update_time innodb)
- MYSQL查看数据表最后更新时间
- mysql的一些操作(linux+windows)持续更新
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
- mysql获取数据库表最后更新时间,update_time 为null
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- 快速查看网页最后更新时间
- javascript按指定格式输出文件最后更新时间
- 更新Linux服务器系统时间