Как правильно использовать setDate? - PullRequest
1 голос
/ 13 сентября 2011

У меня есть таблица со столбцом «date» и типом Date в формате: «2011-09-06», и я хочу выполнить запрос:

select * from tvprograms where date=?

И я пытаюсь это:

Date startDate;
java.util.Date date;
Calendar cal = Calendar.getInstance();
cal.set(2011, 9, 1);
startDate = cal.getTime();
TVProgramDAO tvDAO = new TVProgramDAO();
tvDAO.findUnusedTvPrograms(new java.sql.Date(date.getTime()));

findUnusedTvPrograms выглядит:

public List<Integer> findUnusedTvPrograms(Date date) {
    List<Integer> results = new ArrayList<Integer>();
    if (obtainConnection()) {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        ...
            stmt = con.prepareStatement(findOldTvProgQuery.toString());

            stmt.setDate(1, date);
            rs = stmt.executeQuery();

            while (rs.next()) {

                results.add(rs.getInt(1));
             ...
    return results;
}

Но это не работает.

1 Ответ

2 голосов
/ 13 сентября 2011

Этот код не будет компилироваться для начала, насколько я вижу:

Date startDate;
java.util.Date date;
Calendar cal = Calendar.getInstance();
cal.set(2011, 9, 1);
startDate = cal.getTime();
TVProgramDAO tvDAO = new TVProgramDAO();
tvDAO.findUnusedTvPrograms(new java.sql.Date(date.getTime()));

Вы пытаетесь использовать date, но вы никогда не инициализировали переменную.Вот немного более чистая версия:

Calendar cal = Calendar.getInstance();
cal.set(2011, 9, 1);
Date startDate = cal.getTime();
TVProgramDAO tvDAO = new TVProgramDAO();
tvDAO.findUnusedTvPrograms(new java.sql.Date(startDate.getTime()));

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

...