Java 1.8+Spring 4.0.3执行batchUpdate时遇参数索引越界异常
问题分析与解决
错误原因
你的SQL插入语句中,created_time和updated_time字段使用了MySQL的now()函数自动生成值,因此SQL语句里只有2个占位符(?),但Java代码中却传入了4个参数(id, order_id, created_time, updated_time),参数数量与占位符数量不匹配,导致JDBC无法找到第3、4个占位符,触发Parameter index out of range异常。
解决方案
根据业务需求选择以下任意一种方案:
方案1:保留数据库自动生成时间(使用now())
修改Java代码,只传递前两个参数,移除created_time和updated_time:
insertData.add(new Object[] {id, order_id});
方案2:使用Java代码中的时间值
修改SQL语句,将now()替换为占位符,让Java代码传入时间参数:
private static final String INSERT_QUERY = "insert into order_table(id,order_id,created_time,updated_time)VALUES(?,?,?,?)";
此时代码中传入4个参数的逻辑保持不变即可。
额外注意
确认order_table表中created_time和updated_time字段的类型(如datetime/timestamp)与Java代码中对应的时间类型(如java.util.Date/java.sql.Timestamp)匹配,避免后续出现类型转换异常。
内容的提问来源于stack exchange,提问作者PacificNW_Lover
相关产品推荐
相关产品推荐

