connector/c代码编写总结(1)

今日工作:

使用MYSQL客户端的api读取本地txt文档,传入远程MYSQL服务器端(实验)

收获:

1.mysql_autocommit(&sql, 0);//关闭自动提交

  MYSQL在innodb引擎下可支持非自动提交,用于事务处理。如这次做的多次插入SMART数据,再一起commit,可大大提高写入     效率。

2.mysql_errno(&sql)//返回错误代码,mysql_error(&sql)//返回错误信息

3.fgets()函数按行读取文件或者数据流,linux下(编码格式为unix)读取文件时会保留最后的'\n',windows下(编码格式为dos)保留'\r''\n'。今天就因为把windows桌面上的txt文件直接rz到linux服务器下,未更改编码格式,导致fgets最后多出两个字符('\r''\n')

4.linux下最好不用sprintf,改用snprintf(buf,n,format,arg)防止溢出,其中n的大小保持与buf的大小一致即可,当format代表的源字符串大于n-1时,snprintf会截取前n-1个字符并把第n位写入'\0',小于n时直接读入,并在末尾加入'\0'

5.单线程环境下可以不写mysql_library_init(),因为mysql_init()已经做了同样的工作,但是要写mysql_library_end()以保证安全

6.SQL语句:清空某表的数据

truncate table table_name;

代码如下:

#include <stdio.h>
#include <string.h>
#include "mysql.h"
int main()
{
	MYSQL sql;
  
	mysql_init(&sql); //初始化MYSQL结构体
	if (&sql==NULL)
	{
		printf("init errorn\n");
		return 1;
	}
	 //连接失败就打印具体的错误信息
	 用户为root@localhost, 密码是0126, 数据库是test
	MYSQL*ConnectStatus=mysql_real_connect(&sql,"172.26.225.140","root","123456","SMARTINFO",0,NULL,0);
	if(NULL==ConnectStatus)
	{
		printf("connect errorn\n");
		printf("error:%d: %s\n",mysql_errno(&sql),mysql_error(&sql));
		return 1;
	}
	printf("connect success\n");

	mysql_autocommit(&sql, 0);//关闭自动提交



	//result
	MYSQL_RES*result=NULL;

	//TRANSACTION
	const int MAX_LINE=1024;
	char sql_statement[MAX_LINE];
	memset(sql_statement,0,sizeof sql_statement);
	//insert into smart values('172.26.225.151')";
	mysql_query(&sql,"START TRANSACTION");


	//const int MAX_LINE=1024;
	FILE*fp = NULL;
	char buf[MAX_LINE];
	memset(buf,0,sizeof buf);
	if (NULL == (fp = fopen("dynamic_info.txt", "r")))
	{
		printf("open failed\n");
		return -1;
	}

	while (NULL != fgets(buf, MAX_LINE, fp))
	{
		
		//printf("buf:%d %d %d\n",buf[6],buf[7],buf[8]);
		buf[strlen(buf)-1]='\0';//用\0替换最后一个\n
		//printf("buf:%d %d %d\n",bufi[6],buf[7],buf[8]);
		//snprintf(sql_statement,
		snprintf(sql_statement,MAX_LINE,"insert into smart(smartdata) values(\"%s\")", buf);
		//printf("test2\n");
		int status=mysql_query(&sql, sql_statement);
		if (status)
		{
			printf("Could not execute statement(s)\n");
			mysql_close(&sql);
			exit(0);
		}
	}

  mysql_query(&sql,"COMMIT");
  printf("transaction end\n");

  mysql_free_result(result);
  mysql_close(&sql);
  mysql_library_end();
  return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值