C API 連線MySQL及批量插入

2021-09-07 09:05:33 字數 3678 閱讀 3391

cmysqlmgr.h:

#ifndef _cmysqlmgr_h_

#define _cmysqlmgr_h_

#include #include "mysql.h"

using namespace std;

class cmysqlmgr

;#endif

cmysqlmgr.cpp:

#include "cmysqlmgr.h"

cmysqlmgr::cmysqlmgr()

cmysqlmgr::~cmysqlmgr()

bool cmysqlmgr::connect( const char * shost, const char * suser, const char * spwd, const char * sdbname, const char * sport )

if (!mysql_real_connect(m_pmysql, shost, suser, spwd, sdbname, atoi(sport), null, 0) )

} while (0);

return breturn;

}void cmysqlmgr::closeconnect()

}bool cmysqlmgr::excute( const char * squery )

}catch (std::exception &e)

catch (...)

return breturn;

}mysql * cmysqlmgr::getpmysql()

}

main.cpp:

#include #include #include "cmysqlmgr.h"

using namespace std;

int main()

; const char * ssql = "select * from calcgsdataflash where gscode = 'ztjb' ";

bret = mysql.excute(ssql);

if (!bret)

mysql_res *res;

mysql_row row;

mysql_field *fields;

res = mysql_store_result(mysql.getpmysql());

if (res)

else if (strncmp(fields[j].name, "ymd", strlen("ymd")) == 0)

else if (strncmp(fields[j].name, "hms", strlen("hms")) == 0)

else if (strncmp(fields[j].name, "f10", strlen("f10")) == 0)}}

sprintf(buf, "update calcgsdataflash set hms = %d where gscode = 'ztjb' and ymd = %d and gpcode = '%s' and f10 = %f", hms, ymd, gpcode.c_str(), f10);

cout << "ssql:" << buf << endl;

bool bret = mysql.excute(buf);

if (!bret)

}mysql_free_result(res);

} mysql.closeconnect();

return 0;

}

mysql官網(

3.vs 專案中加入 2 中庫檔案目錄下的 include資料夾、lib資料夾下的 libmysql.lib。

(將 libmysql.dll 拷貝至可執行程式目錄下)

若 release 模式下需要斷點除錯,參見:

2.安裝庫

解壓之後

sudo cp -r include/ /usr/include/mysql/ 

sudo cp -r lib/ /usr/lib64/mysql/

sudo rpm -ivh mysql-connector-c-devel-6.1.11-1.el7.x86_64.rpm (rpm 命令的用法參見:

3.makefile 引用安裝的庫

1.靜態庫 libmysqlclient.a

2.動態庫 libmysqlclient.so (如果安裝之後沒有 libmysqlclient.so ,只有 libmysqlclient.so.18.0.0,就鏈結一下 ln libmysqlclient.so.18.0.0 libmysqlclient.so ,或者重新命名也行)

批量插入:

//innodb表引擎下關閉mysql自動事務提交可以大大提高資料插入的效率,這是因為如果需要插入1000條資料,    mysql會自動發起(提交)1000次的資料寫入請求,如果把autocommit關閉掉,通過程式來控制,只要一 次commit就可以搞定。

#define write_once_count  1000  //設乙個巨集,表示多少條資料提交一次

int count = 0; //設乙個計數值

mysql_autocommit(mysql,0);//關閉自動提交

sprintf(buf,"insert into dxjl_infobase(date,gpcode,type) values(%d,'%s',%d)",ndate,codes,1);

asc2utf8(buf,buf,sizeof(buf));//轉編碼,將asc轉為utf8 以便資料庫可以識別sql語句

int isuccess = mysql_query(mysql,buf);

if(isuccess !=0)

else

if(write_once_count == count)//每write_once_count條資料提交一次

出了迴圈之後加個判斷,避免最後一次迴圈資料未達到write_once_count,無法commit提交寫庫:

if(0 < count)

autocommit是事務,==1時是立即提交,==0之後遇到commit或rollback才提交。

mysql批量插入資料 MySQL中批量插入資料

例1 方法一 sql語句操作 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i int 定義i變數 set i 2 while i 53 do insert into lineinfo ...

mybatis for迴圈批量插入及分批插入

背景是這樣的,在一次多個系統資料同步的時候,資料量較大,一次大概5000條,在同步的時候我採用的批量插入的方法,模擬測試沒問題,但是實際測試卻爆出了stackoverflowerror異常,於是乎,跟了一波 daovoid insertlist listlistdata insert into t ...

C API方式連線mysql資料庫實現增刪改查

1,裝好mysql,新建乙個c 控制台工程 從最簡單的弄起,這個會了,可以往任何c 工程移植 在vs2010中設定,工程 屬性 vc 目錄 包含目錄,將mysql server include的絕對路徑新增進去,例如c program files mysql mysql server 5.6 inc...