char buf[1024*2]={0};
const char *host;//127.0.0.1
const char *user;//root
const char *password;//123
const char *db;//所连的数据库名称
const char *port;//3306
MYSQL *mysql;
mysql_init(mysql);//初始化
if(!mysql_real_connect(mysql,host,user,password,db,port,NULL,0))
{
CString cs;
cs.Format("MySql数据库连接失败!\n");
AfxMessageBox(cs);
}
//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)
{
printf("mysql_query:%s\r\n",mysql_error(mysql));
}
else
{
count ++;
}
if(WRITE_ONCE_COUNT == count)//每WRITE_ONCE_COUNT条数据提交一次
{
mysql_commit(mysql);
count = 0;
}
出了循环之后加个判断,避免最后一次循环数据未达到WRITE_ONCE_COUNT,无法commit提交写库:
if(0 < count)
{
mysql_commit(mysql);
}
autocommit是事务,==1时是立即提交,==0之后遇到commit或rollback才提交。
原文:http://www.cnblogs.com/SZxiaochun/p/6377257.html