批量插入的时候报错 Incorrect integer value: 'æ�­å·ž1' for column 'site_id' at row 1

错误的信息如下:
通过百度查找说的原因都是mysql的版本问题,但是我按照那个改了并没有用,
com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.BatchUpdateException: Incorrect integer value: 'æ�­å·ž1' for column 'site_id' at row 1
at com.jfinal.plugin.activerecord.DbPro.batch(DbPro.java:1010)
at com.jfinal.plugin.activerecord.Db.batch(Db.java:578)
at com.ofsoft.cms.admin.controller.ComnController.uploadExcel(ComnController.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.jfinal.aop.Invocation.invoke(Invocation.java:73)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:82)
at com.ofsoft.cms.core.handler.WebSocketHandler.handle(WebSocketHandler.java:14)
at com.jfinal.plugin.druid.DruidStatViewHandler.handle(DruidStatViewHandler.java:75)
at com.ofsoft.cms.core.handler.ActionHandler.handle(ActionHandler.java:44)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:73)


我的java代码:

批量的时候报错,
单条的时候正常插入,
请问一下这个什么原因
public void uploadExcel() {
		try {
			String date = DateUtils.getCurrentStr(DateUtils.DATE_PATTERN) ;
			//获取文件
			String _flag = getPara("_flag") ;
			UploadFile file = this.getFile("file", "/excel/up/" + date +"/");
			file.getFile().createNewFile();
			//解析excel
			List<Record> ret = ImportExcelUntil.importExcel(file.getFile(), arrMap.get(_flag.split(",")[0]), getRepMap(_flag));
			//获取插入sql语句
			String insertSql = Db.getSqlPara("cms.salesLevel.save", new HashMap<>()).getSql();
			//执行插入-批量的时候报错
			Db.batch(insertSql, getColumns(_flag), ret.subList(0, 1), 1);
			//单条的时候正常插入,
//			Db.save("of_cms_sales_level", ret.get(0));
			Map<String, Object> data = new HashMap<String, Object>();
			data.put("filePath", "/upload/excel/up/" + date +"/"+ file.getFileName());
			data.put("fileName", file.getFileName());
			rendSuccessJson(data);
		} catch (Exception e) {
			e.printStackTrace();
			rendFailedJson(ErrorCode.get("9999"));
		}
	}







评论区

JFinal

2018-12-13 22:02

Db.batch(...) 这个方法,是一条 sql ,然后适用于后面的多组参数,所以这多组参数全都要与那条 sql 可以配合

例如 sql 中要求两个参数都为 int:
insert into xxx ? , ?

假定你一共插入 10 条数据,其中有 9 条数的参数都没问题,但有一条数据的参数,其中一个参数不是 int , 而是别的类型,这就出错了

简单一句话, Db.batch 中的那条 sql , 要可以单独与每组参数配合着用

JFinal

2018-12-13 22:02

你可以通过单步调试的方法,找出其中不能工作的那条数据,其中有一个参数是错误的

老飞的天空

2018-12-16 17:55

@JFinal 改使用
//执行插入
Db.batchSave(tableName, ret, 200);
方法解决

热门反馈

扫码入社