Windows每秒钟10000条以上插入;Linux每秒插入300条以上。Q269752451

输出截图:

Linux输出:

Windows输出:

有须要的联系 QQ 3508551694

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

測试代码

main.cpp

int 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下:直接打开project编译执行(填写一下username、password、ODBC数据源名称就可以)
Linux下:直接make。执行(填写一下username、password、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这样的字段,赶紧改名! !(与keyword冲突) */
/* */
/*********************************************************************************/ #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数据源

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

最新文章

  1. Arcgis 10.1安装
  2. Jmeter模拟不同带宽
  3. CI框架(一)
  4. js字符串与16进制互相转换
  5. MFC 文件按行读写 CStdioFile
  6. cimge 这次能够图片大小尺寸
  7. Ubuntu12.04 下搭建Java开发环境
  8. [iOS]リソースファイルの取得方法
  9. OpenGL ES 三种类型 uniform attribute varying
  10. hdu 4715 Difference Between Primes (打表 枚举)
  11. (中等) CF 576D Flights for Regular Customers (#319 Div1 D题),矩阵快速幂。
  12. bash下. : () {} [] [[]] (())的解释 (非原创,侵删)
  13. kubernetes实践之运行aspnetcore webapi微服务
  14. sprin源码解析之属性编辑器propertyEditor
  15. subversion实用命令整理
  16. 合并两个有序链表(java实现)
  17. Chrome_调试js出现Uncaught SyntaxError: Unexpected identifier
  18. 配置虚拟域名,hosts文件起作用
  19. VC++ 实现修改文件创建、访问、修改时间属性(转载)
  20. 【leetcode 简单】 第五十一题 有效电话号码

热门文章

  1. 2014年spark开发人员大赛火热进行中!
  2. 快速排序、查第k大
  3. android 分享到QQ空间的全部操作
  4. HDU 2874 LCA离线算法 tarjan算法
  5. Linux网络驱动程序
  6. Android 零基础学习之路
  7. PHP 上传文件到其他服务器
  8. SQL 数据库性能优化
  9. 利用keytool颁发https证书方法
  10. mysql学习 1