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="">

C++ OTL MySQL(Windows/Linux) V8.1的更多相关文章

  1. Matlab命令——目录操作(windows&Linux)

    Matlab命令——目录操作(windows&Linux) 1. filesep用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/).有时此命令结合ispc命令使 ...

  2. 视频处理工具FFmpeg的安装(windows/Linux)

    ♣FFmpeg是什么? ♣FFmpeg组成 ♣下载工具 ♣安装FFmpeg ♣应用到j2ee项目 前言:学习视频编码,一定要知道雷霄骅(leixiaohua1020)的专栏 ,伟大的程序员,26岁去世 ...

  3. java环境变量配置(Windows & Linux)

    前言: java 编程中 java 环境变量设置是开发最基础的要求,今天我们一起来学习相关要点和配置. 做些不太恰当但通俗易懂的比喻(个人理解): java 程序就好比汽车. jre(java 运行环 ...

  4. 『深度应用』一小时教你上手MaskRCNN·Keras开源实战(Windows&Linux)

    0. 前言介绍 开源地址:https://github.com/matterport/Mask_RCNN 个人主页:http://www.yansongsong.cn/ MaskRCNN是何凯明基于以 ...

  5. 【移动自动化】【一】环境依赖:android sdk 环境配置(windows + linux)

    Android自动化前提依赖 android sdk 模拟器: mumu模拟器, 逍遥模拟器 真机 windows 环境下Android SDK 配置 配置java环境 去官网下载jdk http:/ ...

  6. python2.7中使用mysql (windows XP)

    一.首先下载mysql—python模块,下载完毕之后会有一个MySQL-python-1.2.3.win32-py2.7.exe文件,点击安装一路next,ok. 二.编辑配置文件(setting. ...

  7. 常用软件的安装(windows/linux)

    1. matlab 2016b (两个 iso 文件)(windows) MATLAB R2016b 安装教程 2. clion 在 ubuntu 下的安装 ubuntu 14.04 Clion201 ...

  8. MySQL重置root密码的几种方法(windows+Linux)

    重置root密码的方法: windows系统下:1.停止mysql服务:2.新建文件init-root.txt,写上如下内容: update mysql.user set password = pas ...

  9. PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码

    做一个内网根据MAC地址自动登录的应用,在WINDOW 2003可以正常使用,函数如下   复制代码 代码如下: function ce_getmac() { if(PHP_OS == 'WINNT' ...

随机推荐

  1. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

  2. java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件

    转账注明出处:http://renjie120.iteye.com/blog/1727933 在工作中要用到android,然后进行网络请求的时候,打算使用httpClient. 总结一下httpCl ...

  3. Oracle DBA优化数据库性能心得

    如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在IO,这是影响性能最主要的方面,由系统中的等待去发现Oracle库中的不足.操作系统某些资源利用的不合理是一个比较好 ...

  4. 浅谈SpringCloud (二) Eureka服务发现组件

    上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐? 可以借助Eureka服务发现组件进行访问. 可以借助官方文档:https://spring.io ...

  5. ListView的Item动画

    1.效果图 2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果 3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局 ...

  6. 蓝牙音箱BluetoothA2dp

    package myapplication.com.mybuletooch; import android.support.v7.app.AppCompatActivity; import andro ...

  7. Android和IOS等效MD5加密

    最近在Android和IOS上都需要对用户的某些输入进行简单的加密,于是采用MD5加密方式. 首先将目的字符串加密一次,获得32位字符串 然后将32位字符串拆为2段,分别加密1次 最后将加密后的2段拼 ...

  8. [Reading] Asking while Reading

    Asking while Reading ——读Java垃圾收集器与内存分配策略 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 为什么 ...

  9. PhotoZoom正式版和试用版的区别是什么?

    通常的工具对数码图片进行放大时,总会降低图片的品质,而这款软体使用了S-SPLINE技术(一种申请过专利的,拥有自动调节.进阶的插值算法的技术),可以将尽可能地提高放大图片的品质.程序最大的特色是可以 ...

  10. 通过adb 设置、删除、获取 系统配置值。

    通过adb 设置.删除.获取 系统配置值. Key定义在:frameworks\base\core\java\android\provider\Settings.java adb shell sett ...