Ошибка формата даты java.язык SQL.SQLException: недопустимый тип столбца

я показываю дату в JSF, используя pattern="dd-MMM-yyyy".

когда я пытаюсь вставить / обновить значения даты в свою БД oracle, я получаю

java.sql.SQLException: Invalid column type

потому что мой формат даты перед вставкой или обновлением находится в этом формате

Wed Feb 09 00:00:00 AST 2011

как я могу правильно вставить или обновить значения даты в Oracle Db и каков наилучший подход для этого?

обновление 1

моя вставка БД код.

private void editSchedule(Schedule schedule)
        Object[] values = { schedule.getStartDate(),
                schedule.getVacationId() };             
        Connection connection = null;       
        PreparedStatement preparedStatement = null; 
        try {                           
            connection = datacon.getConnection();               
            preparedStatement = prepareStatement(connection, SQL_EDIT, values);         
            preparedStatement.executeUpdate();          

        } catch (Exception e) {
            logger.info("errro "+e.getMessage());
            e.printStackTrace();
        } finally {
            // TODO: handle exception
            close(connection, preparedStatement);
        }

    }

часть кода PreparedStaement

public static PreparedStatement prepareStatement
        (Connection connection, String sql, Object... values)
            throws SQLException
    {
        PreparedStatement preparedStatement = connection.prepareStatement(sql
            );
        setValues(preparedStatement, values);
        return preparedStatement;
    }

    public static void setValues(PreparedStatement preparedStatement, Object... values)
        throws SQLException
    {
        for (int i = 0; i < values.length; i++) {
            preparedStatement.setObject(i + 1, values[i]);
            logger.info("sql  "+Arrays.asList(values));
        }
    }

3 ответов


похоже, вы пытаетесь включить данные как текст при вставке/обновлении. Не делайте этого-используйте java.sql.Date на PreparedStatement. Введение ненужных преобразований строк-очень плохая идея - это делает ваш код очень хрупким и делает код более запутанным: храните свои данные в соответствующем типе данных столько, сколько сможете.


JDBC понимает только java.sql.Date, java.sql.Time и java.sql.Timestamp как типы столбцов SQL, а не java.util.Date.

вам нужно изменить

    Object[] values = { schedule.getStartDate(),
            schedule.getVacationId() };             

by

    Object[] values = { new java.sql.Date(schedule.getStartDate().getTime()),
            schedule.getVacationId() };             

тогда это сработает. Просто продолжайте использовать java.util.Date в вашей модели. JSF в свою очередь не понимаю java.sql.Date.


public static String dateToSQLFormat(Date date){
        Format formatter = new SimpleDateFormat("yyyy-MM-dd");
        String ret=formatter.format(date);
        return ret;
    }