linux otlv4 mysql_C++ OTL MySQL(Windows/Linux) V8.1

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

输出截图:

Linux输出:

25cf917ffea849027930f1b5906f8c1d.png

Windows输出:

ec8beccae0b4c6d1fd431b0e13e5a83a.png

有须要的联系 QQ 3508551694

Center

測试代码

main.cpp

int main(int, char *[])

{

vector 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

{

cout<

}

}

catch(otl_exception& ex)

{

cout<

<

<

<

}

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<

/*********************************************************************************/

/* */

/* 经常使用SQL语句写法 */

/*otl_handle.select("select f2 from test_tab",arr); */

/*otl_handle.insert("insert into test_tab1(f2)values(:f2 )",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

#include

#include

#include

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 int insert(const string& sql,const vector& data);

template int select(const string& sql,vector& data);

int count_table_field(const string& table_name,const string& field_name);

private:

otl_connect db; // connect object

string db_infor_;

};

template int Otlv4_Handle::insert(const string& sql,const vector& 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<

}

out.flush();

db.commit();

return 0;

}

template int Otlv4_Handle::select(const string& sql,vector& 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(in),otl_input_iterator(),back_inserter(data));

return 0;

}

#endif

存储数据类定义

存储数据类头文件e_eledata.h

#ifndef E_ELEDATA_H

#define E_ELEDATA_H

#include

#include

#include

#include

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<

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.

4752f52da072f2c0c15865a1afce0414.png

配置ODBC数据源

Center

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值