Код: Выделить всё
public class A{
private Long id;
private String[] field1;
private String[] field2;
}
Код: Выделить всё
jdbcTemplate.batchUpdate(String sql, final List batchArgs, final int[] argTypes)
код типа аргумента для полей, field1 и field2 — 2003, поскольку я использую java.sql.Type.Array для этих полей.
Код: Выделить всё
While executing, I am getting the following error
[Databricks][JDBC](11500) Given type does not match given object: [Ljava.lang.String;@3e1346b0.
Как вставить данные в поле массива с помощью JDBCTemplate
Вот как выглядит мой код вставки
Код: Выделить всё
jdbcTemplate.batchUpdate(sqlQuery,parametersforBatchInsert.getParameterListForBatch(),parametersforBatchInsert.getDataTypeArray());
public ParameterizedDTO getPreparedStatmentParametersForBatch(List parameterSourceList) throws Exception{
ParameterizedDTO dto = new ParameterizedDTO();
Field[] fields = class_name.getDeclaredFields();
Object[] parameterArray = null;
int[] dataTypeArray = new int[fields.length];
List parameterList = new ArrayList();
for(int i=0;i< parameterSourceList.size();i++){
parameterArray = new Object[fields.length];
Object parameterObject = parameterSourceList.get(i);
for(int j=0;j< fields.length;j++){
fields[j].setAccessible(true);
parameterArray[j] = fields[j].get(parameterObject);
if(dto.getDataTypeArray() == null) {
dataTypeArray[j] = getFieldType(fields[j].getType().getName());
}
}
parameterList.add(parameterArray);
if(dto.getDataTypeArray() == null) {
dto.setDataTypeArray(dataTypeArray);
}
}
dto.setParameterListForBatch(parameterList);
return dto;
}
public Integer getFieldType(String fieldType){
return switch (fieldType.toUpperCase()) {
case BOOLEAN, LANG_BOOLEAN -> Types.BOOLEAN;
case STRING -> Types.VARCHAR;
case INT, INTEGER -> Types.INTEGER;
case TIMESTAMP -> Types.TIMESTAMP;
case LONG -> Types.BIGINT;
case SQL_DATE -> Types.DATE;
case STRING_ARRAY -> Types.ARRAY;
default -> 0;
};
}
Вставить в значения каталога.schema.A(?,?,?)
Подробнее здесь: https://stackoverflow.com/questions/790 ... rray-field