最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQLserverversionfortherightsyntaxtousenear''at

来源:懂视网 责编:小采 时间:2020-11-09 13:59:38
文档

MySQLserverversionfortherightsyntaxtousenear''at

MySQLserverversionfortherightsyntaxtousenear''at:MySQL server version for the right syntax to use near '' at line 1 问题描述: 线上日志在执行数据库表insert操作时,出现如下异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc
推荐度:
导读MySQLserverversionfortherightsyntaxtousenear''at:MySQL server version for the right syntax to use near '' at line 1 问题描述: 线上日志在执行数据库表insert操作时,出现如下异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc

MySQL server version for the right syntax to use near '' at line 1 问题描述: 线上日志在执行数据库表insert操作时,出现如下异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:? You have an error

MySQL server version for the right syntax to use near '' at line 1

问题描述:

线上日志在执行数据库表insert操作时,出现如下异常:

### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

问题原因分析:

一般数据库SQL 异常会将sql拼写错误的文本解析错误地点放在near"" 中间引号中,而恰恰这次near语句出现出错地点没有标示,但是可以确定一点就是这个错误一定是sql语句错误造成的。

原因查找:

原因分析唯一可以确定的就是这个sql 拼写一定是错误的,那么是一定要查看源码拼写是否正确。

代码如下:

public String batchSave(Map params) {
	Collection collection = (Collection)params.get("collection");
	StringBuffer buffer = new StringBuffer("insert into sem_creative(id, platCreativeId, platPlanId, platAdgroupId, planId, adgroupId, " +
	"title, desc1, desc2, pcDestinationUrl, pcDisplayUrl, mobileDestinationUrl, mobileDisplayUrl," +
	"pause, status, valid, accountId, platform, opstatus, creator, createTime) values");
	for(Creative c : collection) {
	buffer.append("(").append(c.getId()).append(",")
	.append(StringUtil.emptyToNULL(c.getPlatCreativeId())).append(",")
	.append(StringUtil.emptyToNULL(c.getPlatPlanId())).append(",")
	.append(StringUtil.emptyToNULL(c.getPlatAdgroupId())).append(",")
	.append(c.getPlanId()).append(",")
	.append(c.getAdgroupId()).append(",")
	.append(StringUtil.emptyToNULL(c.getTitle())).append(",")
	.append(StringUtil.emptyToNULL(c.getDesc1())).append(",")
	.append(StringUtil.emptyToNULL(c.getDesc2())).append(",")
	.append(StringUtil.emptyToNULL(c.getPcDestinationUrl())).append(",")
	.append(StringUtil.emptyToNULL(c.getPcDisplayUrl())).append(",")
	.append(StringUtil.emptyToNULL(c.getMobileDestinationUrl())).append(",")
	.append(StringUtil.emptyToNULL(c.getMobileDisplayUrl())).append(",")
	.append(c.getPause()).append(",")
	.append(c.getStatus()).append(",")
	.append(c.getValid()).append(",")
	.append(c.getAccountId()).append(",")
	.append(c.getPlatform()).append(",")
	.append(c.getOpstatus()).append(",")
	.append(StringUtil.emptyToNULL(c.getCreator())).append(",")
	.append(StringUtil.emptyToNULL(c.getCreateTime().toString())).append("),"); 
	}
	buffer.deleteCharAt(buffer.length()-1);
	return buffer.toString();
	}

?这里可以看到SQL语句,拼写是正确的,其中每个value值,对于空值的处理也正确。那为什么会报错呢?

等等,一定有哪里出错了!

for(Creative c : collection) {

?再看看这行代码,如果这个的集合类为空,会怎么样呢?这个一下错误就找到了,在collection为空的情况下,返回的SQL语句就只有前半句,执行就会报上述所描述错误。

问题追踪:

这个地方在一般情况下没有报错,也很少出现;那么为什么这次会出现呢?

这个地方还是得从源码入手

	public final void syncUpload(String filePath, int segment) throws Exception{
	if(segment > MAX_SEGMENT) {
	throw new IllegalArgumentException("分段上传数据量过大!");
	}
	
	if(segment <= 0) {
	this.segment = DEFAULT_SEGMENT;
	}
	
	CSVReader csvFileReader = getCSVReader(filePath);
	
	Iterator it = csvFileReader.iterator();
	List segmentList = new ArrayList();
	while(true) {
	try {
	while(it.hasNext()) {
	if(segmentList.size() == this.segment) {
	try {
	syncBatchSave(segmentList);
	}catch(Exception e) {
	logger.error("批量添加异常: ", e);
	}
	segmentList = new ArrayList(); 
	}
	 E e = it.next();
	 segmentList.add(parse(e));
	}
	}catch(Exception e) {
	logger.error("CSV文件解析异常: ", e);
	 continue;
	}

	break;
	}
	
	syncBatchSave(segmentList);
	}

?这里传入的segmentList看不会为空,但是parse(e)抛出异常时,则会在插入传入的集合不为null,但是集合的 size为0,所以在如上拼写SQL语句时,就会出现更新异常。

总结:

1.在接口的传入参数,一定要做边界校验,比如判空或者最大最小判断(如果集合大小超过20W也会出现异常);

2.团队代码规范中,要整理出代码规范要点,并每周定时review,对于不符合基本要求规范的惩罚5元团队建设基金;

1 楼 Engberber 22 小时前 今日决定将以前遇到的问题以及处理方式做一个分享

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

MySQLserverversionfortherightsyntaxtousenear''at

MySQLserverversionfortherightsyntaxtousenear''at:MySQL server version for the right syntax to use near '' at line 1 问题描述: 线上日志在执行数据库表insert操作时,出现如下异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc
推荐度:
标签: at the for
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top