Не распознает тип даты в вызове Java MySQL DB - PullRequest
1 голос
/ 24 сентября 2010

У меня есть следующие вызовы в одном из моих классов

@Override
public Integer save(NewsItem item){
    ConnectionPool pool = new ConnectionPool();
    Connection connection = pool.getConnection();
    PreparedStatement ps = null;
    try{
        String query = "INSERT INTO newsItem (type,title,content,link,layout,imageUri,timestamp)" +
                       "VALUES (?,?,?,?,?,?,?)";
        ps = connection.prepareStatement(query);
        ps.setInt(1,item.getType());
        ps.setString(2,item.getTitle());
        ps.setString(3,item.getContent());
        ps.setString(4,item.getLink());
        ps.setInt(5,item.getLayout());
        ps.setString(6,item.getImageUri());
        ps.setDate(7,item.getTimestamp());

        return ps.executeUpdate();
    }
    catch(SQLException e){
        e.printStackTrace();
        return 0;
    }
    finally{
        ConnectionUtility utility = new ConnectionUtility();
        utility.closePreparedStatement(ps);
        pool.freeConnection(connection);
    }
}

NewsItem POJO имеет следующие свойства

private Integer id;
    private Integer type;
    private String title;
    private String content;
    private String link;
    private Integer layout;
    private String imageUri;
    private Date timestamp;

Все работает и было провереноза исключением вызова timestamp , который

ps.setDate(7,item.getTimeStamp())

Я могу установить Date для объекта NewsItem , вызвав

item.setTimestamp(new Date());

но я получаю сообщение об ошибке из своей IDE (Eclipse), которое сообщает мне следующее сообщение

Метод setDate (int, Date) в типе NewsItemDAO не применим для аргументовsetDate (int, Date)

Это было проблемой для меня на протяжении всей жизни этого приложения, над которым я работал, потому что мне пришлось хранить временные метки в виде строки в настоящее время.

Если столбец в моей базе данных MySQL имеет тип DATETIME , есть ли другой способ сохранить эту метку времени?Или с вызовом что-то не так?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

setDate() ожидает java.sql.Date, а не java.util.Date.

ps.setDate(7, new java.sql.Date(item.getTimestamp().getTime()));

Но java.sql.Date содержит только часть даты datetime, а не часть времени. Вместо этого вы хотели бы использовать java.sql.Timestamp.

ps.setTimestamp(7, new Timestamp(item.getTimestamp().getTime()));
1 голос
/ 24 сентября 2010

Проверьте ваш импорт - я предполагаю, что вы используете java.util.Date вместо java.sql.Date.

Если возможно, рекомендуется использовать java.sql.Timestamp, расширяющий java.util.Date, чтобы избежать этой путаницы и улучшить читабельность вашего кода.

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