我想使用jdbcTemplate将多条记录插入mysql数据库,所以我选择使用batchUpdate方法,这是我的代码:
@Override
public void actualizarAmortizaciones(List<Amortizacion> lstAmortizaciones) {
jdbcTemplate.batchUpdate("{call contable.spact_amortizaciones(?,?,?,?,?,?,?,?,?,?)}", new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Amortizacion objAmortizacion = lstAmortizaciones.get(i);
ps.setString(1, objAmortizacion.getStrId());
ps.setString(2, objAmortizacion.getStrTarjeta());
ps.setInt(3, objAmortizacion.getIntNumeroAmortizacion());
ps.setDate(4, (Date) objAmortizacion.getDatFechaPago());
ps.setString(5, objAmortizacion.getStrHoraPago());
ps.setInt(6, objAmortizacion.getIntCubierto());
ps.setBigDecimal(7, objAmortizacion.getBdTotalPagado());
ps.setBigDecimal(8, objAmortizacion.getBdCapitalPagado());
ps.setBigDecimal(9, objAmortizacion.getBdInteresPagado());
ps.setBigDecimal(10, objAmortizacion.getBdIvaPagado());
}
@Override
public int getBatchSize() {
return lstAmortizaciones.size();
}
});
}
下一行是抛出错误
Amortizacion objAmortizacion = lstAmortizaciones.get(i);
这是错误:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.bo.Amortizacion
at com.dao.impl.TransaccionDAO$1.setValues(TransaccionDAO.java:49)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:956)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:946)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:629)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:946)
at com.dao.impl.TransaccionDAO.insertarAmortizaciones(TransaccionDAO.java:44)
有人知道为什么会这样吗?
提前致谢。
更新
我从json(我正在使用gson)获取列表解析,其中包含以下代码:
@SuppressWarnings("unchecked")
@RabbitListener(queues = "generarAmortizacionesContable")
public void generarAmortizaciones(String json){
Gson gson = new Gson();
List<Amortizacion> lstAmortizaciones = gson.fromJson(json, List.class);
transaccionBS.insertarAmortizaciones(lstAmortizaciones);
}
但我注意到,当我调试代码时,列表包含LinkedTreeMapElements,所以我不知道这是不是一个好的行为
答案 0 :(得分:0)
最后我注意到我的问题是json输入的格式和json的解析,所以当我将列表转换为json时,我使用以下代码:
List<Amortizacion> lstAmortizaciones = amortizacionDAO.generarAmortizaciones(objTransaccion);
Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
String json = gson.toJson(lstAmortizaciones);
当我需要将json转换为列表时,我使用以下代码:
Type listType = new TypeToken<List<Amortizacion>>() {}.getType();
List<Amortizacion> lstAmortizaciones = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create().fromJson(json, listType);
所以问题是解析是将列表转换为LinkedTreeMap列表,所以当我决定使用TypeToken类时,它会抛出一个关于日期格式的错误,因为列表转换为json的日期就是25 8月,2016所以gson不知道如何转换该列表,然后我使用gsonBuilder指定日期格式并且工作完美,希望这有助于某人。