在AbstractJdbcInsert类中的方法:
private void setParameterValues(PreparedStatement preparedStatement, List<Object> values, int[] columnTypes) throws SQLException { int colIndex = 0; for (Object value : values) { colIndex++; if (columnTypes == null || colIndex < columnTypes.length) { StatementCreatorUtils.setParameterValue(preparedStatement, colIndex, SqlTypeValue.TYPE_UNKNOWN, value); } else { StatementCreatorUtils.setParameterValue(preparedStatement, colIndex, columnTypes[colIndex - 1], value); } } }
看这里 if (columnTypes == null || colIndex < columnTypes.length)
为何colIndex < columnTypes.length时要使用SqlTypeValue.TYPE_UNKNOWN呢,应该这样的吧:
if (columnTypes == null || colIndex > columnTypes.length) { StatementCreatorUtils.setParameterValue(preparedStatement, colIndex, SqlTypeValue.TYPE_UNKNOWN, value); } else { StatementCreatorUtils.setParameterValue(preparedStatement, colIndex, columnTypes[colIndex - 1], value); }