Databricks JDBC Вставка в поле массиваJAVA

Программисты JAVA общаются здесь
Anonymous
Databricks JDBC Вставка в поле массива

Сообщение Anonymous »

Я пытаюсь вставить некоторые данные в таблицу блоков данных, содержащую поля массива (поле1 и поле2). Я использую JDBC для подключения, и мой класс POJO выглядит так

Код: Выделить всё

public class A{
private Long id;
private String[] field1;
private String[] field2;
}
Я использую

Код: Выделить всё

jdbcTemplate.batchUpdate(String sql, final List batchArgs, final int[] argTypes)
где у меня есть список объектов для класса A.
код типа аргумента для полей, 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

Вернуться в «JAVA»