Вложенное исключение - java.sql.SQLTransactionRollbackException: как минимум один параметр для текущего оператора неинициализирован - PullRequest
0 голосов
/ 07 сентября 2018

Обзор

Я создал контроллер, где я передаю Dao через autowire и выполняю запрос, используя jdbctemplate.

Контроллер вызывает метод, созданный в dao, для извлечения таблицы из базы данных.

Код

Контроллер

@Controller  
public class ManagerRoles {
    @Autowired  
    EmployeeDao dao;
    @RequestMapping("getEmployeeSchedule/{empID}")
    public ModelAndView employeeData(@PathVariable("empID")int empID,HttpServletRequest req,HttpServletResponse res,ModelMap model){
        long millis=System.currentTimeMillis();  
        Date dateStart = new Date(millis); 
        Date dateFinal = new Date(dateStart.getYear(),dateStart.getMonth(),dateStart.getDate()+30);
        System.out.println(dateStart);
        System.out.println(dateFinal);
        List<EmployeeHolidays> holidayList = dao.retrieveHolidays(dateStart, dateFinal);
        if(holidayList!=null){
        model.put("holidayList",holidayList);
        }
        System.out.println(holidayList);
        return null;
    }
}

DAO

public List<EmployeeHolidays> retrieveHolidays(Date startDate,Date endDate){
        String sql = "SELECT * FROM HOLIDAYS WHERE DATE >= ? AND DATE <= ? ";
        List<EmployeeHolidays> list = template.query(sql ,new RowMapper<EmployeeHolidays>(){
            public EmployeeHolidays mapRow(ResultSet rs,int rownumber) throws SQLException{
                EmployeeHolidays e = new EmployeeHolidays();
                e.setDate(rs.getDate(1));
                e.setReason(rs.getString(2));
                e.setStatus(rs.getString(3));
                return e;
            }
        });
        return list;
    }

Проблема в том, что при попытке запустить веб-приложение я получаю следующую ошибку при попытке получить данные таблицы.

Тип отчета об исключении

Ошибка обработки запроса сообщения; вложенное исключение org.springframework.dao.ConcurrencyFailureException: StatementCallback; SQL [ВЫБРАТЬ * ОТ ОТДЫХА, ГДЕ ДАТА> =? А ТАКЖЕ ДАТА <=? ]; По крайней мере один параметр для текущего оператора неинициализированным .; вложенное исключение java.sql.SQLTransactionRollbackException: хотя бы один параметр для текущий оператор неинициализирован. </p>

Описание Сервер обнаружил непредвиденное состояние, которое помешал ему выполнить запрос.

Исключение

org.springframework.web.util.NestedServletException: Запрос обработка не удалась; вложенное исключение org.springframework.dao.ConcurrencyFailureException: StatementCallback; SQL [ВЫБРАТЬ * ОТ ОТДЫХА, ГДЕ ДАТА> =? А ТАКЖЕ ДАТА <=? ]; По крайней мере один параметр для текущего оператора неинициализированным .; вложенное исключение java.sql.SQLTransactionRollbackException: хотя бы один параметр для текущий оператор неинициализирован. org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service (HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service (HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) </p>

enter image description here

Я проверил параметры, которые я передаю, и у них обоих есть значения.

Кажется, я не могу найти источник проблемы. Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 07 сентября 2018

Вы забыли добавить parameters как arguments в метод запроса, смотрите здесь:

public List<EmployeeHolidays> retrieveHolidays(Date startDate,Date endDate){
        String sql = "SELECT * FROM HOLIDAYS WHERE DATE >= ? AND DATE <= ? ";
        List<EmployeeHolidays> list = template.query(
sql ,
new Object[] { startDate, endDate} //add this
new RowMapper<EmployeeHolidays>(){
            public EmployeeHolidays mapRow(ResultSet rs,int rownumber) throws SQLException{
                EmployeeHolidays e = new EmployeeHolidays();
                e.setDate(rs.getDate(1));
                e.setReason(rs.getString(2));
                e.setStatus(rs.getString(3));
                return e;
            }
        });
        return list;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...