SQLException: столбец не найден - PullRequest
0 голосов
/ 24 февраля 2019

Мой sql-запрос должен взять все поля из таблицы и перенести их на страницу FTL с помощью шаблона UserMapper.Шаблон указывает, какой объект создать и каким полям объекта какие столбцы таблицы сопоставлять.

В итоге: все поля работают правильно, но поле seanceNumber выдает ошибку «Столбец« seanceNumber »не найден».

Это странно, поскольку столбец правильный, везде тип данных int.

Таблица:

(
  id           int auto_increment,
  name         varchar(255) null,
  email        varchar(255) null,
  seance       varchar(255) null,
  seanceNumber int          not null,
  seat         int          null,

  constraint client_id_uindex
  unique (id)
);

FTL:

<#list clientsList as client>

<tr>
    <td><a href="/client/${client.id}">${client.id}</a></td>
    <td>${client.name}</td>
    <td>${client.email}</td>
    <td>${client.seance}</td>
    <td>${client.seanceNumber}</td>
    <td>${client.seatNumber}</td>
</tr>

SQL:

    public List<Client> getAll() {
    String sql = "SELECT * FROM client";
    return jdbcTemplate.query(sql, new UserMapper());
}

UserMapper:

    public Client mapRow(ResultSet rs, int rowNum) throws SQLException {
    Client client = new Client();
    client.setId(rs.getInt("id"));
    client.setName(rs.getString("name"));
    client.setEmail(rs.getString("email"));
    client.setSeance(rs.getString("seance"));
    client.setSeanceNumber(rs.getInt("seanceNumber"));
    client.setSeatNumber(rs.getInt("seat"));


    return client;
}

Результат:

Ошибка обработки запроса сообщения;вложенным исключением является org.springframework.jdbc.UncategorizedSQLException: StatementCallback;исключение SQLException для SQL [SELECT * FROM client];Состояние SQL [S0022];код ошибки [0];Столбец seanceNumber не найден .;Вложенное исключение - java.sql.SQLException: столбец 'seanceNumber' не найден.

Проверено также на опечатки.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Даже если SQL является стандартом, ни одна база данных не реализовала его полностью.Чтобы избежать таких ошибок, лучше использовать sheak_case в именах таблиц и столбцов.

В вашем случае seance_number также должно работать.

0 голосов
/ 03 марта 2019

Проблема была решена путем переименования столбца 'seanceNumber' в 'seancenumber' в таблице.

"Имена столбцов в SQL обычно не чувствительны к регистру - поэтому не имеет значения, запрашиваете ли вы сеансили SEANCE или SeAnCe. Однако, если вы поместите имена столбцов в двойные кавычки, они станут чувствительными к регистру - я думаю, ваш UserMapper сделал именно это и запросил столбец с именем "seanceNumber", и база данных не смогла его найти (так какназывается seancenumber или SEANCENUMBER в базе данных). "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...