Springboot с JdbcTemplate, читающий столбец 100, в конечном итоге превращается в «Набор результатов закрыт»JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Springboot с JdbcTemplate, читающий столбец 100, в конечном итоге превращается в «Набор результатов закрыт»

Сообщение Anonymous »

Вот мои фрагменты кода

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

package com.org.repository;

import com.org.config.datasourceconfig.DataSourceConfig;
import com.org.domain.transformer.SimpleMapper;
import com.org.infra.projection.SimpleProjection;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.*;

@Slf4j
@Repository
public class MyJDBCRepository extends AbstractJdbcRepository {

public MyJDBCRepository(DataSourceConfig dataSourceConfig) {
super(dataSourceConfig);
}

public SimpleProjection findBy(
Integer search1,
Integer search2){
String query = SQL_QUERY;

boolean hasCondition = query.toLowerCase(Locale.ROOT).contains("where");
StringBuilder queryBuilder = new StringBuilder(query);

hasCondition = appendEqualToClause(queryBuilder, hasCondition,  "a.column1", search1);
hasCondition = appendEqualToClause(queryBuilder, hasCondition,  "a.column2 ", search2);

queryBuilder.append(" limit 1");//TODO: This is temp change since we dont have `TimeStamp` type of column in reporting tables.

log.info("createPreparedStatement [SQL Query]: {} ", queryBuilder);

List params = new ArrayList();
if (search1!= null) {
params.add(search1);
}
if (search1 != null) {
params.add(search2);
}

try {
return getReadJdbcTemplate().queryForObject(queryBuilder.toString(), params.toArray(), new SimpleMapper());
} catch (Exception e) {
log.error("Exception in searchApplications Query: {}", e.getMessage(), e);
}
return null;
}
}

public static boolean appendEqualToClause(StringBuilder queryBuilder, boolean hasCondition, String columnName, Object value) {
if (value != null) {
queryBuilder.append(hasCondition ? " AND " : " WHERE ")
.append(columnName)
.append(" = ?");
return true; // Return true to update hasCondition
}
return hasCondition; // If no condition is added, return the same value
}

Это Mapper

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

package com.org.domain.transformer;

import com.org.infra.projection.SimpleProjection;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

@Slf4j
public class SimpleMapper implements RowMapper {

@Override
public SimpleProjection mapRow(ResultSet rs, int rowNum) throws SQLException {
return new SimpleProjection() {
@Override
public Long getColumn1() {
try {
return rs.getLong("column1");
} catch (SQLException e) {
log.error("1. Reading column name failed : {}", e.getMessage());
return null;
}
}

@Override
public String getColumn2() {
try {
return rs.getString("column2");
} catch (SQLException e) {
log.error("2. Reading column name failed : {}", e.getMessage());
return null;
}
}

:: ::
:: ::

@Override
public Integer getColumn99() {
try {
return rs.getInt("column99");
} catch (SQLException e) {
log.error("99. Reading column name failed : {}", e.getMessage());
return null;
}
}

@Override
public Integer getColumn100() {
try {
return rs.getInt("column100");
} catch (SQLException e) {
log.error("100.  Reading column name failed : {}", e.getMessage());
return null;
}
}
};
}
}

Примечание: я не написал весь класс, потому что он слишком большой в строках, поэтому его можно только упростить.
Интерфейс проецирования

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

package com.org.infra.projection;

public interface SimpleProjection {

Integer getColumn1();
Integer getColumn2();

:: ::
:: ::

Integer getColumn99();
Integer getColumn100();
}

Это моя конфигурация источника данных

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

public DataSource readDataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(dataBaseDriver);
config.setJdbcUrl(readDataBaseUrl);
config.setUsername(readDataBaseUser);
config.setPassword(readDataBasePassword);
config.setMaximumPoolSize(readMaximumPoolSize);
config.setIdleTimeout(readIdleTimeout);
config.setMinimumIdle(readMinimumIdle);
config.setIdleTimeout(readIdleTimeout);
config.setConnectionTimeout(readConnectionTimeout);
config.setMaxLifetime(readMaxLifeTime);
return new HikariDataSource(config);
}
with its properties
spring.datasource.read.hikari.maximum-pool-size=10
spring.datasource.read.hikari.minimum-idle=5
spring.datasource.read.hikari.idle-timeout=10000
spring.datasource.read.hikari.connection-timeout=30000
spring.datasource.read.hikari.max-lifetime=60000
во время выполнения получаю сообщение
  • Ошибка чтения имени столбца: этот набор результатов закрыт.< /li>
    Не удалось прочитать имя столбца: этот набор результатов закрыт.
Что я сделал, так это закомментировал или не читал после 50-го числа. столбец, и для тех, кто дает мне данные, из 41-го столбца он выдает мне ошибку «Набор результатов закрыт», это мой вывод.
Любая помощь или дайте мне знать, что не так, я я здесь делаю?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -resultset
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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