Ошибка формата даты 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;
}