Как я могу преобразовать время sql в время Java для объекта? - PullRequest
0 голосов
/ 05 декабря 2018

Когда я запускаю этот код, он говорит следующее:

Ошибка: (43, 31) java: несовместимые типы: java.sql. Время не может быть преобразовано в java.time.LocalTime

public TrackTime read(int id){

        rs = jdbc.queryForRowSet("SELECT * FROM tracktime where id ='" + id + "'");
        while (rs.next()){
            return new TrackTime (rs.getInt("id"),
                    rs.getDate("date"),
                    rs.getTime("startTime"),
                    rs.getTime("endTime"),
                    rs.getString("licenseType"),
                    rs.getInt("trackNumber"));
        }

        return new TrackTime();
    }

что может быть причиной этой ошибки?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Как уже говорили другие, это должно быть потому, что ваш TrackTime конструктор ожидает аргументы типа LocalTime, в то время как rs.getTime возвращает java.sql.Time.

Предполагая JDBC 4.2 (или выше; вы, вероятно, имеетечто), используйте getObject для извлечения классов java.time, таких как LocalTime, а также LocalDate из вашего набора результатов:

    return new TrackTime (rs.getInt("id"),
            rs.getObject("date", LocalDate.class),
            rs.getObject("startTime", LocalTime.class),
            rs.getObject("endTime", LocalTime.class),
            rs.getString("licenseType"),
            rs.getInt("trackNumber"));

Я взял на себя свободу также изменять поиск даты,что, вероятно, даст вам новую ошибку во время компиляции.Но теперь, когда вы уже используете java.time, может быть лучше изменить конструктор TrackTime так, чтобы он принимал LocalDate?

Если ваш драйвер JDBC еще не совместим с JDBC 4.2, рассмотрите возможность обновления.

0 голосов
/ 05 декабря 2018

Ваш конструктор для класса TrackTime должен ожидать объект класса LocalTime, где rs.getTime("startTime") возвращает java.sql.Time вместо LocalTime и оба не совпадают, поэтому вы получите ошибку.

Вы можете использовать toLocalTime() метод для Time объекта, который возвращает LocalTime объект, и таким образом правильный тип объекта будет передан вашему конструктору и должен избежать ошибки.

Итак, в вашем коде вынужно сделать это,

while (rs.next()){
    return new TrackTime (rs.getInt("id"),
            rs.getDate("date"),
            rs.getTime("startTime").toLocalTime(),
            rs.getTime("endTime").toLocalTime(),
            rs.getString("licenseType"),
            rs.getInt("trackNumber"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...