搜索
首页数据库mysql教程MySQL server version for the right syntax to use near '' at

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<string object> params) {
		Collection<creative> collection = (Collection<creative>)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();
	}</creative></creative></string>

?这里可以看到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  csvFileReader = getCSVReader(filePath);
		
		Iterator<e> 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);
	}</e>

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

总结:

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

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

1 楼 Engberber 22 小时前   今日决定将以前遇到的问题以及处理方式做一个分享
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
将用户添加到MySQL:完整的教程将用户添加到MySQL:完整的教程May 12, 2025 am 12:14 AM

掌握添加MySQL用户的方法对于数据库管理员和开发者至关重要,因为它确保数据库的安全性和访问控制。1)使用CREATEUSER命令创建新用户,2)通过GRANT命令分配权限,3)使用FLUSHPRIVILEGES确保权限生效,4)定期审计和清理用户账户以维护性能和安全。

掌握mySQL字符串数据类型:varchar vs.文本与char掌握mySQL字符串数据类型:varchar vs.文本与charMay 12, 2025 am 12:12 AM

chosecharforfixed-lengthdata,varcharforvariable-lengthdata,andtextforlargetextfield.1)chariseffity forconsistent-lengthdatalikecodes.2)varcharsuitsvariable-lengthdatalikenames,ballancingflexibilitibility andperformance.3)

MySQL:字符串数据类型和索引:最佳实践MySQL:字符串数据类型和索引:最佳实践May 12, 2025 am 12:11 AM

在MySQL中处理字符串数据类型和索引的最佳实践包括:1)选择合适的字符串类型,如CHAR用于固定长度,VARCHAR用于可变长度,TEXT用于大文本;2)谨慎索引,避免过度索引,针对常用查询创建索引;3)使用前缀索引和全文索引优化长字符串搜索;4)定期监控和优化索引,保持索引小巧高效。通过这些方法,可以在读取和写入性能之间取得平衡,提升数据库效率。

mysql:如何远程添加用户mysql:如何远程添加用户May 12, 2025 am 12:10 AM

ToaddauserremotelytoMySQL,followthesesteps:1)ConnecttoMySQLasroot,2)Createanewuserwithremoteaccess,3)Grantnecessaryprivileges,and4)Flushprivileges.BecautiousofsecurityrisksbylimitingprivilegesandaccesstospecificIPs,ensuringstrongpasswords,andmonitori

MySQL字符串数据类型的最终指南:有效的数据存储MySQL字符串数据类型的最终指南:有效的数据存储May 12, 2025 am 12:05 AM

tostorestringsefliceflicyInmySql,ChooSetherightDataTypeBasedyOrneOrneEds:1)USEcharforFixed-LengthStstringStringStringSlikeCountryCodes.2)UseVarcharforvariable-lengtthslikenames.3)USETEXTCONTENT.3)

mysql blob vs.文本:为大对象选择正确的数据类型mysql blob vs.文本:为大对象选择正确的数据类型May 11, 2025 am 12:13 AM

选择MySQL的BLOB和TEXT数据类型时,BLOB适合存储二进制数据,TEXT适合存储文本数据。1)BLOB适用于图片、音频等二进制数据,2)TEXT适用于文章、评论等文本数据,选择时需考虑数据性质和性能优化。

MySQL:我应该将root用户用于产品吗?MySQL:我应该将root用户用于产品吗?May 11, 2025 am 12:11 AM

No,youshouldnotusetherootuserinMySQLforyourproduct.Instead,createspecificuserswithlimitedprivilegestoenhancesecurityandperformance:1)Createanewuserwithastrongpassword,2)Grantonlynecessarypermissionstothisuser,3)Regularlyreviewandupdateuserpermissions

MySQL字符串数据类型说明了:选择适合您数据的合适类型MySQL字符串数据类型说明了:选择适合您数据的合适类型May 11, 2025 am 12:10 AM

mySqlStringDatatatPessHouldBechoseBeadeDataCharacteristicsAndUsecases:1)USECHARFORFIXED LENGTHSTRINGSTRINGSLIKECOUNTRYCODES.2)USEDES.2)usevarcharforvariable-lengtthstringstringstringstringstringstringstringslikenames.3)usebinaryorvarrinaryorvarinarydatalbonydatalgebgeenfopical.4)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器